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 DescriptsonCalculatedPropertyTest <TTarget> CreateFrom(JProperty jProperty) { var path = jProperty.Name.Substring(0, jProperty.Name.Length - 1); var getValue = DescriptsonPropertyManager <TTarget> .ParseAccessPath(path); var comparisonType = (DescriptsonComparisonType)jProperty.Name[jProperty.Name.Length - 1]; var calculation = (IDescriptsonCalculation <TTarget, object>)DescriptsonCalculation.Make(typeof(TTarget), getValue.Body.Type, (JArray)jProperty.Value); return(new DescriptsonCalculatedPropertyTest <TTarget>(getValue, comparisonType, calculation)); }
private static DescriptsonCalculatedProperty <TObject>[] getCalculatedProperties <TObject>(JsonReader reader) where TObject : DescriptsonObject <TObject>, new() { var calculatedProperties = new List <DescriptsonCalculatedProperty <TObject> >(); while (reader.Read() && (reader.TokenType != JsonToken.EndObject)) { if (reader.TokenType != JsonToken.PropertyName) { throw new InvalidOperationException("Unknown JObject conversion state"); } var jProperty = JProperty.Load(reader); var setupProperty = DescriptsonPropertyManager <TObject> .ParseWritePath(jProperty.Name); var calculation = DescriptsonCalculation.Make(typeof(TObject), setupProperty.Body.Type.GetGenericArguments()[1], (JArray)jProperty.Value); calculatedProperties.Add(new DescriptsonCalculatedProperty <TObject>(setupProperty.Compile(), calculation)); } return(calculatedProperties.ToArray()); }