コード例 #1
0
        public void DeserializeComplex_AnonymousObjectWithComplex_Typed()
        {
            var obj = new
            {
                Prop1 = "Value",
                Prop2 = 12,
                Prop3 = new RecursiveClass()
                {
                    MyProp            = 100,
                    RecursiveProperty = null
                }
            };

            var expressionStr = obj.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize(expressionStr, obj.GetType());

            var cast = Dynamic(deserialized);

            Assert.IsType <ExpandoObject>(deserialized);
            Assert.Equal("Value", cast.Prop1);
            Assert.Equal(12, (int)cast.Prop2);

            var prop3 = (RecursiveClass)cast.Prop3;

            Assert.Equal(100, prop3.MyProp);
        }
コード例 #2
0
        public void DeserializeComplex_ArrayComplexMultidimetional()
        {
            var value1 = new PublicConstructorWithParameters("value")
            {
                Prop1 = 1
            };
            var value2 = new PublicConstructorWithParameters("value")
            {
                Prop1 = 2
            };
            var value3 = new PublicConstructorWithParameters("value")
            {
                Prop1 = 3
            };
            var value4 = new PublicConstructorWithParameters("value")
            {
                Prop1 = 4
            };

            var array = new PublicConstructorWithParameters[2, 2] {
                { value1, value2 }, { value3, value4 }
            };
            var expressionStr = array.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PublicConstructorWithParameters[, ]>(expressionStr);

            Assert.Equal(1, deserialized[0, 0].Prop1);
            Assert.Equal(2, deserialized[0, 1].Prop1);
            Assert.Equal(3, deserialized[1, 0].Prop1);
            Assert.Equal(4, deserialized[1, 1].Prop1);
        }
コード例 #3
0
        public void DeserializeComplex_TypedObject_RecursiveAntiparalell()
        {
            var objTyped1 = new RecursiveClass()
            {
                MyProp            = 100,
                RecursiveProperty = null
            };

            var objTyped2 = new RecursiveClass()
            {
                MyProp            = 120,
                RecursiveProperty = objTyped1
            };

            objTyped1.RecursiveProperty = objTyped2;

            var expressionStr = objTyped1.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (RecursiveClass)deserializer.Deserialize(expressionStr, objTyped1.GetType());

            Assert.IsType <RecursiveClass>(deserialized);
            Assert.Equal(100, deserialized.MyProp);
            Assert.Equal(120, deserialized.RecursiveProperty.MyProp);
            Assert.Same(deserialized, deserialized.RecursiveProperty.RecursiveProperty);
        }
コード例 #4
0
        public void DeserializeComplex_AnonymousListObject_NoTyped()
        {
            var list = new
            {
                A = new List <RecursiveClass>()
                {
                    new RecursiveClass
                    {
                        MyProp = 999,
                        ZProp  = "value1"
                    },
                    new RecursiveClass
                    {
                        MyProp = 1000,
                        ZProp  = "value2"
                    }
                }
            };

            var expressionStr = list.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (ExpandoObject)deserializer.Deserialize(expressionStr);

            Assert.Equal("999", GetExpandoObjectValue(deserialized, "A", "[0]", "MyProp"));
            Assert.Equal("value1", GetExpandoObjectValue(deserialized, "A", "[0]", "ZProp"));

            Assert.Equal("1000", GetExpandoObjectValue(deserialized, "A", "[1]", "MyProp"));
            Assert.Equal("value2", GetExpandoObjectValue(deserialized, "A", "[1]", "ZProp"));
        }
コード例 #5
0
        public void DeserializeComplex_AbstractAndInterfaceClass_NoFactory()
        {
            var obj = new ClassWithAbstractAndInterface
            {
                A = new ImplementAbstractAndInterface {
                    MyProp = 10
                },
                B = new ImplementAbstractAndInterface {
                    MyProp = 20
                },
            };

            var factory = new ComplexEntityFactory(obj.GetType());

            factory.IgnoreErrors = true;

            var expressionStr = obj.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <ClassWithAbstractAndInterface>(expressionStr, factory);

            Assert.Null(deserialized.A);
            Assert.Null(deserialized.B);
            Assert.Equal(2, factory.Errors.Count);
            Assert.Equal($"An instance of type '{typeof(Interface).FullName}' contains value, but not created. Make sure it is an interface or an abstract class, if so, set up a corresponding concrete class in the '{nameof(ComplexEntityFactory)}.{nameof(ComplexEntityFactory.MapTypes)}' configuration.", factory.Errors[0]);
            Assert.Equal($"An instance of type '{typeof(AbstractClass).FullName}' contains value, but not created. Make sure it is an interface or an abstract class, if so, set up a corresponding concrete class in the '{nameof(ComplexEntityFactory)}.{nameof(ComplexEntityFactory.MapTypes)}' configuration.", factory.Errors[1]);
        }
コード例 #6
0
        public void DeserializeComplex_EmptyStringWithSpace()
        {
            var deserializer = new ComplexEntityExpressionDeserializer();
            var deserialized = deserializer.Deserialize <PublicConstructorWithParameters>("");

            Assert.Null(deserialized);
        }
コード例 #7
0
        public void DeserializeComplex_AbstractAndInterfaceClass()
        {
            var obj = new ClassWithAbstractAndInterface
            {
                A = new ImplementAbstractAndInterface {
                    MyProp = 10
                },
                B = new ImplementAbstractAndInterface {
                    MyProp = 20
                },
            };

            var expressionStr = obj.AsExpression().DefaultSerializer.Serialize();

            var factory = new ComplexEntityFactory(obj.GetType());

            factory.AddMapType <Interface, ImplementAbstractAndInterface>();
            factory.AddMapType <AbstractClass, ImplementAbstractAndInterface>();

            var deserializer = new ComplexEntityExpressionDeserializer();
            var deserialized = deserializer.Deserialize <ClassWithAbstractAndInterface>(expressionStr, factory);

            Assert.Equal(10, deserialized.A.MyProp);
            Assert.Equal(20, deserialized.B.MyProp);
        }
コード例 #8
0
        public void DeserializeComplex_AnonymousListObject_Typed()
        {
            var listAnonymous = new
            {
                A = new List <RecursiveClass>()
                {
                    new RecursiveClass
                    {
                        MyProp = 999,
                        ZProp  = "value1"
                    },
                    new RecursiveClass
                    {
                        MyProp = 1000,
                        ZProp  = "value2"
                    }
                }
            };

            var expressionStr = listAnonymous.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (ExpandoObject)deserializer.Deserialize(expressionStr, listAnonymous.GetType());

            var list = GetExpandoObjectValue <List <RecursiveClass> >(deserialized, "A");

            Assert.Equal(999, list[0].MyProp);
            Assert.Equal("value1", list[0].ZProp);

            Assert.Equal(1000, list[1].MyProp);
            Assert.Equal("value2", list[1].ZProp);
        }
コード例 #9
0
        public void DeserializeComplex_ListObject()
        {
            var list = new List <RecursiveClass>()
            {
                new RecursiveClass
                {
                    MyProp = 999,
                    ZProp  = "value1"
                },
                new RecursiveClass
                {
                    MyProp = 1000,
                    ZProp  = "value2"
                }
            };

            var expressionStr = list.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (List <RecursiveClass>)deserializer.Deserialize(expressionStr, list.GetType());

            Assert.Equal(2, deserialized.Count);
            Assert.Equal(999, deserialized[0].MyProp);
            Assert.Null(deserialized[0].RecursiveProperty);
            Assert.Equal("value1", deserialized[0].ZProp);

            Assert.Equal(1000, deserialized[1].MyProp);
            Assert.Null(deserialized[1].RecursiveProperty);
            Assert.Equal("value2", deserialized[1].ZProp);
        }
コード例 #10
0
        public void DeserializeComplex_PrimitiveStringNull()
        {
            var expressionStr = "\"Model.0\" + \"A\"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <Model>(expressionStr);

            Assert.Null(deserialized.A);
        }
コード例 #11
0
        public void DeserializeComplex_PrimitiveBoolean()
        {
            var expressionStr = "\"Boolean: true\"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <bool>(expressionStr);

            Assert.True(deserialized);
        }
コード例 #12
0
        public void DeserializeComplex_PrimitiveStringWithSpace()
        {
            var expressionStr = "\"Model.0\" + \"A:  \"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <Model>(expressionStr);

            Assert.Equal(" ", deserialized.A);
        }
コード例 #13
0
        public void DeserializeComplex_TypedObject_ConstructorOnlyWithParameters()
        {
            var expressionStr = "\"Complex.1\" + \"Prop1: 2000\"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PublicConstructorWithParameters>(expressionStr);

            Assert.Equal(2000, deserialized.Prop1);
        }
コード例 #14
0
        public void DeserializeComplex_TypedObject_NonPublicConstructor()
        {
            var expressionStr = "\"Complex.1\" + \"Prop1: 2000\"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PrivateConstructor>(expressionStr);

            Assert.Equal(2000, deserialized.Prop1);
        }
コード例 #15
0
        public void DeserializeComplex_PrimitiveDouble()
        {
            double val           = 99.99D;
            var    expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var    deserializer  = new ComplexEntityExpressionDeserializer();
            var    deserialized  = deserializer.Deserialize <double>(expressionStr);

            Assert.Equal(val, deserialized);
        }
コード例 #16
0
        public void DeserializeComplex_ArrayIntEmpty()
        {
            var array         = new int[0];
            var expressionStr = array.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <int[]>(expressionStr);

            Assert.Empty(deserialized);
        }
コード例 #17
0
        public void DeserializeComplex_PrimitiveUInt16()
        {
            ushort val           = 1;
            var    expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var    deserializer  = new ComplexEntityExpressionDeserializer();
            var    deserialized  = deserializer.Deserialize <UInt16>(expressionStr);

            Assert.Equal(1, deserialized);
        }
コード例 #18
0
        public void DeserializeComplex_PrimitiveSByte()
        {
            sbyte val           = 1;
            var   expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var   deserializer  = new ComplexEntityExpressionDeserializer();
            var   deserialized  = deserializer.Deserialize <sbyte>(expressionStr);

            Assert.Equal(1, deserialized);
        }
コード例 #19
0
        public void DeserializeComplex_PrimitiveInt64()
        {
            long val           = 10;
            var  expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var  deserializer  = new ComplexEntityExpressionDeserializer();
            var  deserialized  = deserializer.Deserialize <long>(expressionStr);

            Assert.Equal(10, deserialized);
        }
コード例 #20
0
        public void DeserializeComplex_PrimitiveDateTimeOffset()
        {
            var val           = new DateTimeOffset(2000, 1, 1, 1, 1, 1, new TimeSpan());
            var expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <DateTime>(expressionStr);

            Assert.Equal(val, deserialized);
        }
コード例 #21
0
        public void DeserializeComplex_Null_Expression()
        {
            PublicConstructorWithParameters[] array = null;
            var expressionStr = array.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PublicConstructorWithParameters>(expressionStr);

            Assert.Null(deserialized);
        }
コード例 #22
0
        public void DeserializeComplex_PrimitiveLong()
        {
            long longVal       = long.MaxValue;
            var  expressionStr = longVal.AsExpression().DefaultSerializer.Serialize();
            var  deserializer  = new ComplexEntityExpressionDeserializer();
            var  deserialized  = deserializer.Deserialize <long>(expressionStr);

            Assert.Equal(longVal, deserialized);
        }
コード例 #23
0
        public void DeserializeComplex_PrimitiveChar()
        {
            var val           = 'º';
            var expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <char>(expressionStr);

            Assert.Equal(val, deserialized);
        }
コード例 #24
0
        public void DeserializeComplex_PrimitiveFloat()
        {
            float val           = 99.99F;
            var   expressionStr = val.AsExpression().DefaultSerializer.Serialize();
            var   deserializer  = new ComplexEntityExpressionDeserializer();
            var   deserialized  = deserializer.Deserialize <float>(expressionStr);

            Assert.Equal(val, deserialized);
        }
コード例 #25
0
        public void DeserializationComplex1()
        {
            var expressionAsString = "\"Int32[].1\" + \"[0]: 1\" + \"[1]: 2\" + \"[2]: 3\"";
            var deserializer       = new ComplexEntityExpressionDeserializer();
            var array = deserializer.Deserialize <int[]>(expressionAsString);

            System.Console.WriteLine(array[0]);
            System.Console.WriteLine(array[1]);
            System.Console.WriteLine(array[2]);
        }
コード例 #26
0
        public void DeserializeComplex_ArrayInt()
        {
            var array         = new int[] { 1, 2, 3 };
            var expressionStr = array.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <int[]>(expressionStr);

            Assert.Equal(1, deserialized[0]);
            Assert.Equal(2, deserialized[1]);
            Assert.Equal(3, deserialized[2]);
        }
コード例 #27
0
        public void DeserializeComplex_TypedObject_PublicPropertyNoSetter()
        {
            var expressionStr = "\"Complex.1\" + \"PropOnlySet: 2000\" + \"Prop1: 1\" + \"Prop3: 3\" + \"Prop2: 2\" + \"Prop4: 4\" + \"PropNoBackingField: 999\"";
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PropertyPrivateWithoutSetter>(expressionStr);

            Assert.Equal(1, deserialized.Prop1);
            Assert.Equal(2, deserialized.Prop2);
            Assert.Equal(3, deserialized.GetType().GetProperty("Prop3", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(deserialized));
            Assert.Equal(4, deserialized.Prop4);
            Assert.Equal(2000, deserialized.propOnlyValue);
            Assert.Equal(2, deserialized.PropNoBackingField);
        }
コード例 #28
0
        public void DeserializeComplex_TypedObject_PropertyIEnumerableAndBackFieldIsList()
        {
            var obj = new PropertyTypeDiffBackField();

            obj.Set();

            var expressionStr = obj.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <PropertyTypeDiffBackField>(expressionStr);

            Assert.Equal(1, deserialized.IEnumerable.ElementAt(0));
            Assert.Equal(2, deserialized.IEnumerable.ElementAt(1));
            Assert.Equal(3, deserialized.IEnumerable.ElementAt(2));
        }
コード例 #29
0
        public void DeserializeComplex_DictionaryPrimitiveObject()
        {
            var dic = new Dictionary <string, int>()
            {
                { "A", 1 },
                { "B", 2 },
            };

            var expressionStr = dic.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <Dictionary <string, int> >(expressionStr);

            Assert.Equal(2, deserialized.Count);
            Assert.Equal(1, deserialized["A"]);
            Assert.Equal(2, deserialized["B"]);
        }
コード例 #30
0
        public void DeserializeComplex_ArrayJaggedComplexMultidimetional()
        {
            int[][] jaggedArray = new int[2][];
            jaggedArray[0]    = new int[2];
            jaggedArray[0][0] = 10;
            jaggedArray[0][1] = 20;
            jaggedArray[1]    = new int[1];
            jaggedArray[1][0] = 30;

            var expressionStr = jaggedArray.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <int[][]>(expressionStr);

            Assert.Equal(10, deserialized[0][0]);
            Assert.Equal(20, deserialized[0][1]);
            Assert.Equal(30, deserialized[1][0]);
        }