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); }
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); }
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); }
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")); }
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]); }
public void DeserializeComplex_EmptyStringWithSpace() { var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = deserializer.Deserialize <PublicConstructorWithParameters>(""); Assert.Null(deserialized); }
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); }
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); }
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); }
public void DeserializeComplex_PrimitiveStringNull() { var expressionStr = "\"Model.0\" + \"A\""; var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = deserializer.Deserialize <Model>(expressionStr); Assert.Null(deserialized.A); }
public void DeserializeComplex_PrimitiveBoolean() { var expressionStr = "\"Boolean: true\""; var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = deserializer.Deserialize <bool>(expressionStr); Assert.True(deserialized); }
public void DeserializeComplex_PrimitiveStringWithSpace() { var expressionStr = "\"Model.0\" + \"A: \""; var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = deserializer.Deserialize <Model>(expressionStr); Assert.Equal(" ", deserialized.A); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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]); }
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]); }
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); }
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)); }
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"]); }
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]); }