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 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 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); }
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); }