Example #1
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (reader.NodeType == JsonNodeType.Null)
            {
                return(null);
            }

            var dictionary = _createDictionary();

            foreach (var keyString in reader.ReadProperties(path))
            {
                var key   = _deserializeKey(keyString, info, path);
                var value = _valueSerializer.DeserializeObject(reader, info, path.AppendProperty(keyString));

                var jsonNumber = value as JsonNumber;
                if (jsonNumber != null)
                {
                    value = jsonNumber.DoubleValue;
                }

                _addToDictionary(dictionary, key, value);
            }

            return(dictionary);
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            string value;

            switch (reader.NodeType)
            {
            case JsonNodeType.Number:
            case JsonNodeType.String:
                value = (string)reader.Value;
                break;

            case JsonNodeType.Boolean:
                value = (bool)reader.Value ? "true" : "false";
                break;

            default:
                if (_nullable && reader.NodeType == JsonNodeType.Null)
                {
                    value = null;
                }
                else
                {
                    throw new XSerializerException(string.Format(
                                                       "Unexpected node type '{0}' encountered in '{1}.DeserializeObject' method.",
                                                       reader.NodeType,
                                                       typeof(StringJsonSerializer)));
                }
                break;
            }

            return(_read(value, info));
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            switch (reader.NodeType)
            {
            case JsonNodeType.Null:
            case JsonNodeType.String:
            case JsonNodeType.Boolean:
                return(reader.Value);

            case JsonNodeType.Number:
                try
                {
                    return(new JsonNumber((string)reader.Value));
                }
                catch (ArgumentException ex)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                                                         path, reader.Value, reader.Line, reader.Position, ex);
                }

            case JsonNodeType.OpenObject:
                return(DeserializeJsonObject(reader, info, path));

            case JsonNodeType.OpenArray:
                return(DeserializeJsonArray(reader, info, path));

            case JsonNodeType.EndOfString:
                throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                                                     path, reader.Line, reader.Position);

            default:
                throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                                                     path, reader.Value, reader.Line, reader.Position);
            }
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            string value;

            switch (reader.NodeType)
            {
            case JsonNodeType.Number:
            case JsonNodeType.String:
                value = (string)reader.Value;
                break;

            case JsonNodeType.Boolean:
                value = (bool)reader.Value ? "true" : "false";
                break;

            default:
                if (_nullable && reader.NodeType == JsonNodeType.Null)
                {
                    value = null;
                }
                else
                {
                    throw GetMissingOpenQuoteException(reader, path);
                }
                break;
            }

            return(_read(value, info, path, reader.Line, reader.Position));
        }
Example #5
0
        public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            if (instance == null)
            {
                writer.WriteNull();
            }
            else
            {
                var serializer = _serializerCache.GetOrAdd(Tuple.Create(instance.GetType(), _encrypt), tuple => GetSerializer(tuple.Item1));

                if (_encrypt)
                {
                    var toggler = new EncryptWritesToggler(writer);
                    toggler.Toggle();

                    serializer.SerializeObject(writer, instance, info);

                    toggler.Revert();
                }
                else
                {
                    serializer.SerializeObject(writer, instance, info);
                }
            }
        }
Example #6
0
            public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
            {
                var jsonObject = (JsonObject)instance;

                writer.WriteOpenObject();

                var first = true;

                foreach (var item in jsonObject)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        writer.WriteItemSeparator();
                    }

                    writer.WriteValue(item.Key);
                    writer.WriteNameValueSeparator();
                    _dynamicJsonSerializer.SerializeObject(writer, item.Value, info);
                }

                writer.WriteCloseObject();
            }
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (!reader.ReadContent(path))
            {
                if (reader.NodeType == JsonNodeType.EndOfString)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                                                         path, reader.Line, reader.Position);
                }

                Debug.Assert(reader.NodeType == JsonNodeType.Invalid);

                if (reader.Value is string)
                {
                    throw GetMissingCloseQuoteException(reader, path);
                }

                throw GetMissingOpenQuoteException(reader, path);
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader, path);
                toggler.Toggle();

                switch (reader.NodeType)
                {
                case JsonNodeType.Number:
                case JsonNodeType.String:
                case JsonNodeType.Boolean:
                    break;

                case JsonNodeType.EndOfString:
                    throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                                                         path, reader.Line, reader.Position);

                case JsonNodeType.Invalid:
                    if (reader.Value is string)
                    {
                        throw GetMissingCloseQuoteException(reader, path);
                    }

                    throw GetMissingOpenQuoteException(reader, path);

                default:
                    throw GetMissingOpenQuoteException(reader, path);
                }

                try
                {
                    return(Read(reader, info, path));
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return(Read(reader, info, path));
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            string value;

            switch (reader.NodeType)
            {
                case JsonNodeType.Number:
                case JsonNodeType.String:
                    value = (string)reader.Value;
                    break;
                case JsonNodeType.Boolean:
                    value = (bool)reader.Value ? "true" : "false";
                    break;
                default:
                    if (_nullable && reader.NodeType == JsonNodeType.Null)
                    {
                        value = null;
                    }
                    else
                    {
                        throw new XSerializerException(string.Format(
                            "Unexpected node type '{0}' encountered in '{1}.DeserializeObject' method.",
                            reader.NodeType,
                            typeof(StringJsonSerializer)));
                    }
                    break;
            }

            return _read(value, info);
        }
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            if (!reader.ReadContent())
            {
                throw new XSerializerException("Unexpected end of input while attempting to parse '{' character.");
            }

            if (reader.NodeType == JsonNodeType.Null)
            {
                return(null);
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader);
                toggler.Toggle();

                try
                {
                    return(Read(reader, info));
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return(Read(reader, info));
        }
Example #10
0
        private object DeserializeJsonArray(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var jsonArray = new JsonArray(info);

            while (true)
            {
                if (reader.PeekNextNodeType() == JsonNodeType.CloseArray)
                {
                    // If the next content is CloseArray, read it and return the empty list.
                    reader.Read();
                    return(jsonArray);
                }

                jsonArray.Add(DeserializeObject(reader, info));

                if (!reader.ReadContent())
                {
                    throw new XSerializerException("Unexpected end of input while attempting to parse ',' character.");
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new XSerializerException("Unexpected node type found while attempting to parse ',' character: " +
                                                   reader.NodeType + ".");
                }
            }

            return(jsonArray);
        }
        public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            if (instance == null)
            {
                writer.WriteNull();
            }
            else
            {
                var serializer = _serializerCache.GetOrAdd(Tuple.Create(instance.GetType(), _encrypt), tuple => GetSerializer(tuple.Item1));

                if (_encrypt)
                {
                    var toggler = new EncryptWritesToggler(writer);
                    toggler.Toggle();

                    serializer.SerializeObject(writer, instance, info);

                    toggler.Revert();
                }
                else
                {
                    serializer.SerializeObject(writer, instance, info);
                }
            }
        }
        public void WriteValue(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            var value = _getValue(instance);

            writer.WriteValue(Name);
            writer.WriteNameValueSeparator();
            _serializer.Value.SerializeObject(writer, value, info);
        }
        public object DeserializeObject(
            JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (!reader.ReadContent(path))
            {
                if (reader.NodeType == JsonNodeType.Invalid)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                                                         path, reader.Value, reader.Line, reader.Position);
                }

                Debug.Assert(reader.NodeType == JsonNodeType.EndOfString);

                throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                                                     path, reader.Value, reader.Line, reader.Position);
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader, path);
                if (toggler.Toggle())
                {
                    if (reader.NodeType == JsonNodeType.Invalid)
                    {
                        throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                                                             path, reader.Value, reader.Line, reader.Position);
                    }

                    var exception = false;

                    try
                    {
                        return(Read(reader, info, path));
                    }
                    catch (MalformedDocumentException)
                    {
                        exception = true;
                        throw;
                    }
                    finally
                    {
                        if (!exception)
                        {
                            if (reader.NodeType != JsonNodeType.Null && reader.DecryptReads && (reader.ReadContent(path) || reader.NodeType == JsonNodeType.Invalid))
                            {
                                throw new MalformedDocumentException(MalformedDocumentError.ExpectedEndOfDecryptedString,
                                                                     path, reader.Value, reader.Line, reader.Position, null, reader.NodeType);
                            }

                            toggler.Revert();
                        }
                    }
                }
            }

            return(Read(reader, info, path));
        }
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (!reader.ReadContent(path))
            {
                if (reader.NodeType == JsonNodeType.EndOfString)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                        path, reader.Line, reader.Position);
                }

                Debug.Assert(reader.NodeType == JsonNodeType.Invalid);

                if (reader.Value is string)
                {
                    throw GetMissingCloseQuoteException(reader, path);
                }

                throw GetMissingOpenQuoteException(reader, path);
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader, path);
                toggler.Toggle();

                switch (reader.NodeType)
                {
                    case JsonNodeType.Number:
                    case JsonNodeType.String:
                    case JsonNodeType.Boolean:
                        break;
                    case JsonNodeType.EndOfString:
                        throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                            path, reader.Line, reader.Position);
                    case JsonNodeType.Invalid:
                        if (reader.Value is string)
                        {
                            throw GetMissingCloseQuoteException(reader, path);
                        }

                        throw GetMissingOpenQuoteException(reader, path);
                    default:
                        throw GetMissingOpenQuoteException(reader, path);
                }

                try
                {
                    return Read(reader, info, path);
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return Read(reader, info, path);
        }
        public object DeserializeObject(
            JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (!reader.ReadContent(path))
            {
                if (reader.NodeType == JsonNodeType.Invalid)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                        path, reader.Value, reader.Line, reader.Position);
                }

                Debug.Assert(reader.NodeType == JsonNodeType.EndOfString);

                throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                    path, reader.Value, reader.Line, reader.Position);
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader, path);
                if (toggler.Toggle())
                {
                    if (reader.NodeType == JsonNodeType.Invalid)
                    {
                        throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                            path, reader.Value, reader.Line, reader.Position);
                    }

                    var exception = false;

                    try
                    {
                        return Read(reader, info, path);
                    }
                    catch (MalformedDocumentException)
                    {
                        exception = true;
                        throw;
                    }
                    finally
                    {
                        if (!exception)
                        {
                            if (reader.ReadContent(path) || reader.NodeType == JsonNodeType.Invalid)
                            {
                                throw new MalformedDocumentException(MalformedDocumentError.ExpectedEndOfDecryptedString,
                                    path, reader.Value, reader.Line, reader.Position, null, reader.NodeType);
                            }

                            toggler.Revert();
                        }
                    }
                }
            }

            return Read(reader, info, path);
        }
Example #16
0
 public static IJsonSerializeOperationInfo WithNewSerializationState(this IJsonSerializeOperationInfo info)
 {
     return(new JsonSerializeOperationInfo
     {
         EncryptionMechanism = info.EncryptionMechanism,
         EncryptKey = info.EncryptKey,
         SerializationState = new SerializationState(),
         DateTimeHandler = info.DateTimeHandler
     });
 }
Example #17
0
        private object DeserializeJsonObject(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var jsonObject = new JsonObject(info);

            foreach (var propertyName in reader.ReadProperties())
            {
                jsonObject.Add(propertyName, DeserializeObject(reader, info));
            }

            return(jsonObject);
        }
Example #18
0
            public bool SetValue(JsonReader reader, string propertyName, IJsonSerializeOperationInfo info, string path)
            {
                SerializableJsonProperty property;

                if (_serializablePropertiesMap.TryGetValue(propertyName, out property))
                {
                    property.SetValue(_instance, reader, info, path);
                    return(true);
                }

                return(false);
            }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var factory = _createObjectFactory.Value.Invoke();

            foreach (var propertyName in reader.ReadProperties())
            {
                if (!factory.SetValue(reader, propertyName, info))
                {
                    reader.Discard();
                }
            }

            return(factory.GetInstance());
        }
Example #20
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            var factory = _createObjectFactory.Value.Invoke();

            foreach (var propertyName in reader.ReadProperties(path))
            {
                var propertyPath = path.AppendProperty(propertyName);

                if (!factory.SetValue(reader, propertyName, info, propertyPath))
                {
                    reader.Discard(propertyPath);
                }
            }

            return(factory.GetInstance());
        }
Example #21
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (reader.NodeType == JsonNodeType.Null)
            {
                return(null);
            }

            var list = _createList();

            if (reader.PeekContent() == JsonNodeType.CloseArray)
            {
                // If the next content node is CloseArray, we're reading an empty
                // array. Read the CloseArray node and return the empty list.
                reader.Read(path);
                return(_transformList(list));
            }

            var index = 0;

            while (true)
            {
                var item = _itemSerializer.DeserializeObject(reader, info, path + "[" + index++ + "]");
                _addItem(list, item);

                if (!reader.ReadContent(path))
                {
                    Debug.Assert(reader.NodeType == JsonNodeType.EndOfString);

                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                                                         path, reader.Line, reader.Position);
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                                                         path, reader.Value, reader.Line, reader.Position);
                }
            }

            return(_transformList(list));
        }
        private static object Try(Func <string, IJsonSerializeOperationInfo, object> parseFunc,
                                  string value, IJsonSerializeOperationInfo info, Type type, string path, int line, int position)
        {
            if (value == null)
            {
                return(null);
            }

            try
            {
                return(parseFunc(value, info));
            }
            catch (Exception ex)
            {
                throw new MalformedDocumentException(MalformedDocumentError.StringInvalidValue, path, value, line, position, ex, type);
            }
        }
Example #23
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var dictionary = _createDictionary();

            foreach (var keyString in reader.ReadProperties())
            {
                var key   = _deserializeKey(keyString, info);
                var value = _valueSerializer.DeserializeObject(reader, info);

                var jsonNumber = value as JsonNumber;
                if (jsonNumber != null)
                {
                    value = jsonNumber.DoubleValue;
                }

                _addToDictionary(dictionary, key, value);
            }

            return(dictionary);
        }
Example #24
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            if (reader.NodeType == JsonNodeType.Null)
            {
                return(null);
            }

            var list = _createList();

            while (true)
            {
                if (reader.PeekNextNodeType() == JsonNodeType.CloseArray)
                {
                    // If the next content is CloseArray, read it and return the empty list.
                    reader.Read();
                    return(list);
                }

                var item = _itemSerializer.DeserializeObject(reader, info);
                _addItem(list, item);

                if (!reader.ReadContent())
                {
                    throw new XSerializerException("Unexpected end of input while attempting to parse ',' character.");
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new XSerializerException("Unexpected node type found while attempting to parse ',' character: " +
                                                   reader.NodeType + ".");
                }
            }

            return(list);
        }
Example #25
0
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            switch (reader.NodeType)
            {
            case JsonNodeType.Null:
            case JsonNodeType.String:
            case JsonNodeType.Boolean:
                return(reader.Value);

            case JsonNodeType.Number:
                return(new JsonNumber((string)reader.Value));

            case JsonNodeType.OpenObject:
                return(DeserializeJsonObject(reader, info));

            case JsonNodeType.OpenArray:
                return(DeserializeJsonArray(reader, info));

            default:
                throw new XSerializerException("Invalid json.");
            }
        }
Example #26
0
            public bool SetValue(JsonReader reader, string propertyName, IJsonSerializeOperationInfo info, string path)
            {
                var serializerAndArgIndex = _getSerializerAndArgIndex(propertyName);

                if (serializerAndArgIndex != null)
                {
                    var value = serializerAndArgIndex.Item1.DeserializeObject(reader, info, path + "." + propertyName);
                    _constructorArguments[serializerAndArgIndex.Item2] = value;
                    return(true);
                }

                SerializableJsonProperty property;

                if (_serializablePropertiesMap.TryGetValue(propertyName, out property))
                {
                    var value = property.ReadValue(reader, info, path + "." + propertyName);
                    _setPropertyValueActions.Add(instance => property.SetValue(instance, value));
                    return(true);
                }

                return(false);
            }
        private object DeserializeJsonArray(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            var jsonArray = new JsonArray(info);

            if (reader.PeekContent() == JsonNodeType.CloseArray)
            {
                // If the next content node is CloseArray, we're reading an empty
                // array. Read the CloseArray node and return the empty array.
                reader.Read(path);
                return(jsonArray);
            }

            var index = 0;

            while (true)
            {
                jsonArray.Add(DeserializeObject(reader, info, path + "[" + index++ + "]"));

                if (!reader.ReadContent(path))
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                                                         path, reader.Line, reader.Position);
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                                                         path, reader.Line, reader.Position);
                }
            }

            return(jsonArray);
        }
        public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            if (instance == null)
            {
                writer.WriteNull();
            }
            else
            {
                if (_encrypt)
                {
                    var toggler = new EncryptWritesToggler(writer);
                    toggler.Toggle();

                    _write(writer, instance);

                    toggler.Revert();
                }
                else
                {
                    _write(writer, instance);
                }
            }
        }
Example #29
0
        public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            if (instance == null)
            {
                writer.WriteNull();
            }
            else
            {
                if (_encrypt)
                {
                    var toggler = new EncryptWritesToggler(writer);
                    toggler.Toggle();

                    writer.WriteValue((bool)instance);

                    toggler.Revert();
                }
                else
                {
                    writer.WriteValue((bool)instance);
                }
            }
        }
Example #30
0
        private void Write(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var first = true;

            var serializingProperties = _serializingPropertiesMap.GetOrAdd(instance.GetType(), GetSerializableProperties);

            foreach (var property in serializingProperties)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                property.WriteValue(writer, instance, info);
            }

            writer.WriteCloseObject();
        }
Example #31
0
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            if (!reader.ReadContent())
            {
                throw new XSerializerException("Reached end of stream while parsing boolean value.");
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader);
                toggler.Toggle();

                try
                {
                    return(Read(reader));
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return(Read(reader));
        }
Example #32
0
            public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
            {
                var jsonArray = (JsonArray)instance;

                writer.WriteOpenArray();

                var first = true;

                foreach (var item in jsonArray)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        writer.WriteItemSeparator();
                    }

                    _dynamicJsonSerializer.SerializeObject(writer, item, info);
                }

                writer.WriteCloseArray();
            }
        private void Write(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenArray();

            var enumerable = (IEnumerable)instance;

            var first = true;

            foreach (var item in enumerable)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                _itemSerializer.SerializeObject(writer, item, info);
            }

            writer.WriteCloseArray();
        }
Example #34
0
        private void Write(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenArray();

            var enumerable = (IEnumerable)instance;

            var first = true;

            foreach (var item in enumerable)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                _itemSerializer.SerializeObject(writer, item, info);
            }

            writer.WriteCloseArray();
        }
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            if (!reader.ReadContent())
            {
                throw new XSerializerException("Reached end of stream while parsing string value.");
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader);
                toggler.Toggle();

                try
                {
                    return Read(reader, info);
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return Read(reader, info);
        }
 public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info, string path)
 {
     throw new NotImplementedException();
 }
            public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
            {
                var jsonArray = (JsonArray)instance;

                writer.WriteOpenArray();

                var first = true;

                foreach (var item in jsonArray)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        writer.WriteItemSeparator();
                    }

                    _dynamicJsonSerializer.SerializeObject(writer, item, info);
                }

                writer.WriteCloseArray();
            }
 private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
 {
     switch (reader.NodeType)
     {
         case JsonNodeType.Null:
         case JsonNodeType.String:
         case JsonNodeType.Boolean:
             return reader.Value;
         case JsonNodeType.Number:
             try
             {
                 return new JsonNumber((string)reader.Value);
             }
             catch (ArgumentException ex)
             {
                 throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                     path, reader.Value, reader.Line, reader.Position, ex);
             }
         case JsonNodeType.OpenObject:
             return DeserializeJsonObject(reader, info, path);
         case JsonNodeType.OpenArray:
             return DeserializeJsonArray(reader, info, path);
         case JsonNodeType.EndOfString:
             throw new MalformedDocumentException(MalformedDocumentError.MissingValue,
                 path, reader.Line, reader.Position);
         default:
             throw new MalformedDocumentException(MalformedDocumentError.InvalidValue,
                 path, reader.Value, reader.Line, reader.Position);
     }
 }
        private object DeserializeJsonObject(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            var jsonObject = new JsonObject(info);

            foreach (var propertyName in reader.ReadProperties(path))
            {
                jsonObject.Add(propertyName, DeserializeObject(reader, info, path.AppendProperty(propertyName)));
            }

            return jsonObject;
        }
        private object DeserializeJsonArray(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            var jsonArray = new JsonArray(info);

            if (reader.PeekContent() == JsonNodeType.CloseArray)
            {
                // If the next content node is CloseArray, we're reading an empty
                // array. Read the CloseArray node and return the empty array.
                reader.Read(path);
                return jsonArray;
            }

            var index = 0;

            while (true)
            {
                jsonArray.Add(DeserializeObject(reader, info, path + "[" + index++ + "]"));

                if (!reader.ReadContent(path))
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                        path, reader.Line, reader.Position);
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                        path, reader.Line, reader.Position);
                }
            }

            return jsonArray;
        }
        private void WriteIDictionaryOfStringToObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var dictionary = (IDictionary<string, object>)instance;

            var first = true;

            foreach (var item in dictionary)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                writer.WriteValue(item.Key);
                writer.WriteNameValueSeparator();
                _valueSerializer.SerializeObject(writer, item.Value, info);
            }

            writer.WriteCloseObject();
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var factory = _createObjectFactory.Value.Invoke();

            foreach (var propertyName in reader.ReadProperties())
            {
                if (!factory.SetValue(reader, propertyName, info))
                {
                    reader.Discard();
                }
            }

            return factory.GetInstance();
        }
 public void WriteValue(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
 {
     var value = _getValue(instance);
     writer.WriteValue(Name);
     writer.WriteNameValueSeparator();
     _serializer.Value.SerializeObject(writer, value, info);
 }
Example #44
0
        private void WriteIDictionaryOfAnythingToAnything(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var dictionary = (IEnumerable)instance;

            var first = true;

            Func <object, object> getKeyFunc   = null;
            Func <object, object> getValueFunc = null;

            foreach (var item in dictionary)
            {
                if (first)
                {
                    first = false;
                    var itemType = item.GetType();
                    getKeyFunc   = _getKeyFuncCache.GetOrAdd(itemType, GetGetKeyFunc);
                    getValueFunc = _getValueFuncCache.GetOrAdd(itemType, GetGetValueFunc);
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                var key = getKeyFunc(item);

                var keyString = key as string;
                if (keyString != null)
                {
                    writer.WriteValue(keyString);
                }
                else
                {
                    var sb = new StringBuilder();

                    using (var stringWriter = new StringWriterWithEncoding(sb, Encoding.UTF8))
                    {
                        using (var keyWriter = new JsonWriter(stringWriter, info))
                        {
                            _keySerializer.SerializeObject(keyWriter, key, info);
                        }
                    }

                    writer.WriteValue((sb.ToString()));
                }

                writer.WriteNameValueSeparator();
                _valueSerializer.SerializeObject(writer, getValueFunc(item), info);
            }

            writer.WriteCloseObject();
        }
        public object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            if (!reader.ReadContent())
            {
                throw new XSerializerException("Unexpected end of input while attempting to parse '{' character.");
            }

            if (reader.NodeType == JsonNodeType.Null)
            {
                return null;
            }

            if (_encrypt)
            {
                var toggler = new DecryptReadsToggler(reader);
                toggler.Toggle();

                try
                {
                    return Read(reader, info);
                }
                finally
                {
                    toggler.Revert();
                }
            }

            return Read(reader, info);
        }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info)
        {
            var dictionary = _createDictionary();

            foreach (var keyString in reader.ReadProperties())
            {
                var key = _deserializeKey(keyString, info);
                var value = _valueSerializer.DeserializeObject(reader, info);

                var jsonNumber = value as JsonNumber;
                if (jsonNumber != null)
                {
                    value = jsonNumber.DoubleValue;
                }

                _addToDictionary(dictionary, key, value);
            }

            return dictionary;
        }
            public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
            {
                var jsonObject = (JsonObject)instance;

                writer.WriteOpenObject();

                var first = true;

                foreach (var item in jsonObject)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        writer.WriteItemSeparator();
                    }

                    writer.WriteValue(item.Key);
                    writer.WriteNameValueSeparator();
                    _dynamicJsonSerializer.SerializeObject(writer, item.Value, info);
                }

                writer.WriteCloseObject();
            }
 public object ReadValue(JsonReader reader, IJsonSerializeOperationInfo info, string path)
 {
     return _serializer.Value.DeserializeObject(reader, info, path);
 }
        private void WriteIDictionaryOfAnythingToAnything(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var dictionary = (IEnumerable)instance;

            var first = true;

            Func<object, object> getKeyFunc = null;
            Func<object, object> getValueFunc = null;

            foreach (var item in dictionary)
            {
                if (first)
                {
                    first = false;
                    var itemType = item.GetType();
                    getKeyFunc = _getKeyFuncCache.GetOrAdd(itemType, GetGetKeyFunc);
                    getValueFunc = _getValueFuncCache.GetOrAdd(itemType, GetGetValueFunc);
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                var key = getKeyFunc(item);

                var keyString = key as string;
                if (keyString != null)
                {
                    writer.WriteValue(keyString);
                }
                else
                {
                    var sb = new StringBuilder();

                    using (var stringWriter = new StringWriterWithEncoding(sb, Encoding.UTF8))
                    {
                        using (var keyWriter = new JsonWriter(stringWriter, info))
                        {
                            _keySerializer.SerializeObject(keyWriter, key, info);
                        }
                    }

                    writer.WriteValue((sb.ToString()));
                }

                writer.WriteNameValueSeparator();
                _valueSerializer.SerializeObject(writer, getValueFunc(item), info);
            }

            writer.WriteCloseObject();
        }
Example #50
0
 public JsonReader(TextReader reader, IJsonSerializeOperationInfo info)
 {
     _primaryReader = reader;
     _currentReader = _primaryReader;
     _info = info;
 }
 public void SetValue(object instance, JsonReader reader, IJsonSerializeOperationInfo info, string path)
 {
     var value = ReadValue(reader, info, path);
     _setValue(instance, value);
 }
Example #52
0
 public JsonWriter(TextWriter writer, IJsonSerializeOperationInfo info)
 {
     _primaryWriter = writer;
     _currentWriter = _primaryWriter;
     _info = info;
 }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            var factory = _createObjectFactory.Value.Invoke();

            foreach (var propertyName in reader.ReadProperties(path))
            {
                var propertyPath = path.AppendProperty(propertyName);

                if (!factory.SetValue(reader, propertyName, info, propertyPath))
                {
                    reader.Discard(propertyPath);
                }
            }

            return factory.GetInstance();
        }
        private void WriteIDictionaryOfStringToAnything(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var dictionary = (IEnumerable)instance;

            var first = true;

            Func<object, object> getKeyFunc = null;
            Func<object, object> getValueFunc = null;

            foreach (var item in dictionary)
            {
                if (first)
                {
                    first = false;
                    var itemType = item.GetType();
                    getKeyFunc = _getKeyFuncCache.GetOrAdd(itemType, GetGetKeyFunc);
                    getValueFunc = _getValueFuncCache.GetOrAdd(itemType, GetGetValueFunc);
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                writer.WriteValue((string)getKeyFunc(item));
                writer.WriteNameValueSeparator();
                _valueSerializer.SerializeObject(writer, getValueFunc(item), info);
            }

            writer.WriteCloseObject();
        }
Example #55
0
 public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
 {
     _write(writer, instance, info);
 }
        private void Write(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
        {
            writer.WriteOpenObject();

            var first = true;

            var serializingProperties = _serializingPropertiesMap.GetOrAdd(instance.GetType(), GetSerializableProperties);

            foreach (var property in serializingProperties)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.WriteItemSeparator();
                }

                property.WriteValue(writer, instance, info);
            }

            writer.WriteCloseObject();
        }
            public bool SetValue(JsonReader reader, string propertyName, IJsonSerializeOperationInfo info, string path)
            {
                SerializableJsonProperty property;

                if (_serializablePropertiesMap.TryGetValue(propertyName, out property))
                {
                    property.SetValue(_instance, reader, info, path);
                    return true;
                }

                return false;
            }
            public bool SetValue(JsonReader reader, string propertyName, IJsonSerializeOperationInfo info, string path)
            {
                var serializerAndArgIndex = _getSerializerAndArgIndex(propertyName);

                if (serializerAndArgIndex != null)
                {
                    var value = serializerAndArgIndex.Item1.DeserializeObject(reader, info, path + "." + propertyName);
                    _constructorArguments[serializerAndArgIndex.Item2] = value;
                    return true;
                }

                SerializableJsonProperty property;
                if (_serializablePropertiesMap.TryGetValue(propertyName, out property))
                {
                    var value = property.ReadValue(reader, info, path + "." + propertyName);
                    _setPropertyValueActions.Add(instance => property.SetValue(instance, value));
                    return true;
                }

                return false;
            }
        private object Read(JsonReader reader, IJsonSerializeOperationInfo info, string path)
        {
            if (reader.NodeType == JsonNodeType.Null)
            {
                return null;
            }

            var list = _createList();

            if (reader.PeekContent() == JsonNodeType.CloseArray)
            {
                // If the next content node is CloseArray, we're reading an empty
                // array. Read the CloseArray node and return the empty list.
                reader.Read(path);
                return _transformList(list);
            }

            var index = 0;

            while (true)
            {
                var item = _itemSerializer.DeserializeObject(reader, info, path + "[" + index++ + "]");
                _addItem(list, item);

                if (!reader.ReadContent(path))
                {
                    Debug.Assert(reader.NodeType == JsonNodeType.EndOfString);

                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                        path, reader.Line, reader.Position);
                }

                if (reader.NodeType == JsonNodeType.CloseArray)
                {
                    break;
                }

                if (reader.NodeType != JsonNodeType.ItemSeparator)
                {
                    throw new MalformedDocumentException(MalformedDocumentError.ArrayMissingCommaOrCloseSquareBracket,
                        path, reader.Value, reader.Line, reader.Position);
                }
            }

            return _transformList(list);
        }
 public void SerializeObject(JsonWriter writer, object instance, IJsonSerializeOperationInfo info)
 {
     _write(writer, instance, info);
 }