Пример #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);
        }
Пример #2
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));
        }
Пример #3
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);
        }
Пример #4
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);
        }