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();
            }
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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());
        }