Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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 !);
        }
Exemplo n.º 5
0
        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);
        }