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();
            }
        }
Пример #2
0
        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()));
        }