private static NonDataContractClass DeserializerVersion1(IShapeshifterReader reader) { var val = reader.Read <string>("Value"); return(new NonDataContractClass() { Value = val }); }
private static object TransformVersionOne(IShapeshifterReader reader) { var oldFormatValue = reader.Read <string>("Id"); var newFormatValue = Int32.Parse(oldFormatValue); return(new MyClassVersionTwo() { Id = newFormatValue }); }
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); }
/// <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); } }
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 }); }
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()); }
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); }
public object NonStaticDeserializer(IShapeshifterReader reader) { return(null); }
/// <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) { }
public static object TimeSpanDeserialize(IShapeshifterReader reader) { var valueAsTicks = reader.Read <long>("value"); return(new TimeSpan(valueAsTicks)); }
public static object Deserialize(IShapeshifterReader reader, Type targetType) { var valueAsString = reader.Read <string>(Constants.EnumValueKey); return(Enum.Parse(targetType, valueAsString, false)); }
public static MyEnum Deserialize(IShapeshifterReader reader) { var enumValueAsInt = reader.Read <int>("MyKey"); return((MyEnum)enumValueAsInt); }