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)); }
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.Value, reader.Line, reader.Position); } Debug.Assert(reader.NodeType == JsonNodeType.Invalid); throw new MalformedDocumentException(MalformedDocumentError.NumberInvalidValue, path, reader.Value, reader.Line, reader.Position, null, _type); } if (_encrypt) { var toggler = new DecryptReadsToggler(reader, path); if (toggler.Toggle()) { if (reader.NodeType == JsonNodeType.EndOfString) { throw new MalformedDocumentException(MalformedDocumentError.MissingValue, path, reader.Value, reader.Line, reader.Position); } var exception = false; try { return Read(reader, 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, 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)); }
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 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)); }
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 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) { 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); }
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 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) { 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)); }
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 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 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; }
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; }
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 object DeserializeObject(JsonReader reader, IJsonSerializeOperationInfo info) { if (!reader.ReadContent()) { throw new XSerializerException("Unexpected end of input while attempting to parse beginning of value."); } if (_encrypt) { var toggler = new DecryptReadsToggler(reader); toggler.Toggle(); try { return Read(reader, info); } finally { toggler.Revert(); } } return Read(reader, info); }