private void onDeserialized(StreamingContext streamingContext) { if (contentData.ContainsKey("validate")) { ValidationTest = DescriptsonLogicalAnd <TObject> .CreateFrom((JObject)contentData["validate"]); } else { ValidationTest = new DescriptsonTrueTest <TObject>(); } if (!contentData.ContainsKey("calculate")) { calculations = new DescriptsonCalculatedProperty <TObject> [0]; } else { calculations = contentData["calculate"].Cast <JProperty>().Select(jProperty => { var setupProperty = DescriptsonPropertyManager <TObject> .ParseWritePath(jProperty.Name); var calculation = DescriptsonCalculation.Make(typeof(TObject), setupProperty.Body.Type.GetGenericArguments()[1], (JArray)jProperty.Value); return(new DescriptsonCalculatedProperty <TObject>(setupProperty.Compile(), calculation)); }) .ToArray(); } }
public static DescriptsonConditional <TTarget, TResult> CreateFrom(IEnumerable <JToken> jTokens) { var jParameters = jTokens.ToArray(); if (jParameters.Length != 3) { throw new InvalidOperationException("An If Conditional needs exactly 3 parameters!"); } if (jParameters[0].Type != JTokenType.Object) { throw new InvalidOperationException("The first parameter of an If Conditional needs to be an object!"); } var calculations = DescriptsonCalculation <TTarget, TResult> .GetSubCalculations(jParameters.Skip(1)); return(new DescriptsonConditional <TTarget, TResult>( DescriptsonLogicalAnd <TTarget> .CreateFrom((JObject)jParameters[0]), calculations.First(), calculations.Last())); }