Пример #1
0
            private static NonDataContractClass DeserializerVersion1(IShapeshifterReader reader)
            {
                var val = reader.Read <string>("Value");

                return(new NonDataContractClass()
                {
                    Value = val
                });
            }
Пример #2
0
        private static object TransformVersionOne(IShapeshifterReader reader)
        {
            var oldFormatValue = reader.Read <string>("Id");
            var newFormatValue = Int32.Parse(oldFormatValue);

            return(new MyClassVersionTwo()
            {
                Id = newFormatValue
            });
        }
Пример #3
0
        public static object DeserializerForOldVersion(IShapeshifterReader reader)
        {
            var      val = reader.Read <string>("__enumValue");
            TestEnum result;

            if (TestEnum.TryParse(val, out result))
            {
                return(TestEnum.One);
            }
            return(result);
        }
Пример #4
0
        /// <summary>
        /// Creates a builder for the type given. If a reader is specified it tries to fill the new instance with the data from the reader.
        /// If instance manipulation is enabled one can set member values after acquiring the instance from the builder.
        /// </summary>
        /// <param name="typeToBuild">Type to build.</param>
        /// <param name="reader">Reader with member data.</param>
        /// <param name="enableInstanceManipulation">Allow member value set after getting the instance.</param>
        /// <remarks>
        /// Instance manipulation be useful in scenarios where one of the values is not known at the custom deserializer, but can be set later on.
        /// In such case the custom deserializer can return the instance and also save the builder. Later when the missing value is available (eg. on a
        /// diffrent deserializer) the value can be set using the saved builder.
        /// Builder registers all data manipulation and defers the actual creation and data set until the last moment.
        /// </remarks>
        public InstanceBuilder(Type typeToBuild, IShapeshifterReader reader, bool enableInstanceManipulation)
        {
            _typeInspector = new TypeInspector(typeToBuild);
            _instance      = FormatterServices.GetUninitializedObject(typeToBuild);
            _enableInstanceManipulation = enableInstanceManipulation;
            _memberSetsRequests         = new MemberSetRequests(typeToBuild);

            if (reader != null)
            {
                SetMembersByReflection(reader);
            }
        }
Пример #5
0
            private static object TransformVersionOne(IShapeshifterReader reader)
            {
                var age       = reader.Read <int>("Age");
                var namePack  = reader.GetReader("Name");
                var firstName = namePack.Read <string>("FirstName");
                var lastName  = namePack.Read <string>("LastName");

                return(new PersonVersionTwo()
                {
                    Age = age, Name = firstName + " " + lastName
                });
            }
Пример #6
0
        public static object DeserializerForOldVersion(IShapeshifterReader reader)
        {
            var builder = new InstanceBuilder <IndividualCustomer>();

            builder.SetMember("Name", reader.Read <string>("Name"));

            var oldAddress = reader.Read <string>("HomeAddress");

            builder.SetMember("HomeAddress", ConvertStringToAddress(oldAddress));

            builder.SetMember("Orders", reader.Read <List <Order> >("Orders"));
            return(builder.GetInstance());
        }
Пример #7
0
        private void SetMembersByReflection(IShapeshifterReader reader)
        {
            var packItemCandidates = _typeInspector.DataHolderMembers.ToDictionary(item => item.Name);

            foreach (var packItem in reader)
            {
                FieldOrPropertyMemberInfo target;
                if (packItemCandidates.TryGetValue(packItem.Key, out target))
                {
                    _memberSetsRequests.AddOrReplace(target, packItem.Value);
                }
            }
        }
            public static object DeserializeAnyDescendant(IShapeshifterReader reader, Type targetType)
            {
                var value = reader.Read <int>("MyKey");

                var valueProperty = targetType.GetPropertyRecursive("BaseProperty", BindingFlags.Public | BindingFlags.Instance);

                if (valueProperty == null)
                {
                    throw new Exception(string.Format("BaseProperty not found on type {0}.", targetType.FullName));
                }

                var result = FormatterServices.GetUninitializedObject(targetType);

                valueProperty.SetValue(result, value, null);
                return(result);
            }
 public static object Deserialize(IShapeshifterReader reader, Type targetType)
 {
     return(null);
 }
 public static object Deserialize(IShapeshifterReader reader)
 {
     return(null);
 }
Пример #11
0
 public object NonStaticDeserializer(IShapeshifterReader reader)
 {
     return(null);
 }
Пример #12
0
        /// <summary>
        /// Creates a builder for the type and the reader given. The builder tries to fill the new instance with the data from the reader.
        /// </summary>
        /// <param name="typeToBuild">Type to build.</param>
        /// <param name="reader">Reader with member data.</param>

        public InstanceBuilder(Type typeToBuild, IShapeshifterReader reader) : this(typeToBuild, reader, false)
        {
        }
Пример #13
0
        public static object TimeSpanDeserialize(IShapeshifterReader reader)
        {
            var valueAsTicks = reader.Read <long>("value");

            return(new TimeSpan(valueAsTicks));
        }
Пример #14
0
        public static object Deserialize(IShapeshifterReader reader, Type targetType)
        {
            var valueAsString = reader.Read <string>(Constants.EnumValueKey);

            return(Enum.Parse(targetType, valueAsString, false));
        }
Пример #15
0
            public static MyEnum Deserialize(IShapeshifterReader reader)
            {
                var enumValueAsInt = reader.Read <int>("MyKey");

                return((MyEnum)enumValueAsInt);
            }