public JsonValue Serialize <T>(T obj, JsonSerializer serializer) { var json = new JsonObject(); var type = typeof(T); var objectType = obj.GetType(); bool typeKeyAdded = false; if (serializer.Options.TypeNameSerializationBehavior != TypeNameSerializationBehavior.Never && (serializer.Options.TypeNameSerializationBehavior == TypeNameSerializationBehavior.Always || type.GetTypeInfo().IsAbstract || type.GetTypeInfo().IsInterface || (type != objectType && serializer.Options.TypeNameSerializationBehavior != TypeNameSerializationBehavior.OnlyForAbstractions))) { typeKeyAdded = true; json.Add(Constants.TypeKey, objectType.AssemblyQualifiedName); } if (typeKeyAdded || !serializer.Options.OnlyExplicitProperties) { type = obj.GetType(); } var propertyList = ReflectionCache.GetMembers(type, serializer.Options.PropertySelectionStrategy, serializer.Options.AutoSerializeFields); var map = _SerializeValues(obj, serializer, propertyList); _ConstructJsonObject(json, map, serializer.Options); return(json.Count == 0 ? JsonValue.Null : json); }
public JsonValue Serialize(SerializationContext context) { var json = new JsonObject(); var type = context.RequestedType; var objectType = context.Source !.GetType(); bool typeKeyAdded = false; if (context.RootSerializer.Options.TypeNameSerializationBehavior != TypeNameSerializationBehavior.Never && (context.RootSerializer.Options.TypeNameSerializationBehavior == TypeNameSerializationBehavior.Always || type.GetTypeInfo().IsAbstract || type.GetTypeInfo().IsInterface || (type != objectType && context.RootSerializer.Options.TypeNameSerializationBehavior != TypeNameSerializationBehavior.OnlyForAbstractions))) { typeKeyAdded = true; json.Add(Constants.TypeKey, objectType.AssemblyQualifiedName); } if (typeKeyAdded || !context.RootSerializer.Options.OnlyExplicitProperties) { type = context.Source.GetType(); } var propertyList = ReflectionCache.GetMembers(type, context.RootSerializer.Options.PropertySelectionStrategy, context.RootSerializer.Options.AutoSerializeFields); var map = _SerializeValues(context, propertyList); _ConstructJsonObject(json, map, context.RootSerializer.Options); return(json); }
public T Deserialize <T>(JsonValue json, JsonSerializer serializer) { var obj = serializer.AbstractionMap.CreateInstance <T>(json, serializer.Options.Resolver); var type = obj.GetType(); var propertyList = ReflectionCache.GetMembers(type, serializer.Options.PropertySelectionStrategy, serializer.Options.AutoSerializeFields); var map = _DeserializeValues(obj, json, serializer, propertyList, !serializer.Options.CaseSensitiveDeserialization); if ((json.Object.Count > 0) && (serializer.Options.InvalidPropertyKeyBehavior == InvalidPropertyKeyBehavior.ThrowException)) { throw new TypeDoesNotContainPropertyException(type, json); } _AssignObjectProperties(obj, map); return(obj); }
public object Deserialize(DeserializationContext context) { var json = context.LocalValue; var type = context.RootSerializer.AbstractionMap.IdentifyTypeToResolve(context.InferredType, context.LocalValue); var propertyList = ReflectionCache.GetMembers(type, context.RootSerializer.Options.PropertySelectionStrategy, context.RootSerializer.Options.AutoSerializeFields); var map = _DeserializeValues(context, propertyList, !context.RootSerializer.Options.CaseSensitiveDeserialization); context.ValueMap = map; if (json.Object.Count > 0 && context.RootSerializer.Options.InvalidPropertyKeyBehavior == InvalidPropertyKeyBehavior.ThrowException) { throw new TypeDoesNotContainPropertyException(type, json); } _AssignObjectProperties(out var obj, type, context); return(obj !); }
public object Deserialize(SerializationContext context) { var json = context.LocalValue; var obj = context.RootSerializer.AbstractionMap.CreateInstance(context); var type = obj.GetType(); var propertyList = ReflectionCache.GetMembers(type, context.RootSerializer.Options.PropertySelectionStrategy, context.RootSerializer.Options.AutoSerializeFields); var map = _DeserializeValues(context, propertyList, !context.RootSerializer.Options.CaseSensitiveDeserialization); if ((json.Object.Count > 0) && (context.RootSerializer.Options.InvalidPropertyKeyBehavior == InvalidPropertyKeyBehavior.ThrowException)) { throw new TypeDoesNotContainPropertyException(type, json); } _AssignObjectProperties(ref obj, map); return(obj); }