public ReadResults ReadObject(out JsonObject result) { result = new JsonObject(); if (!StringReader.CanRead() || StringReader.Peek() != OBJECT_OPEN_CHARACTER) { return(ReadResults.Failure(JsonCommandError.MalformedJson())); } StringReader.Skip(); SkipWhitespace(); ReadResults readResults; while (StringReader.CanRead() && StringReader.Peek() != OBJECT_CLOSE_CHARACTER) { SkipWhitespace(); readResults = ReadString(out JsonString name); if (!readResults.Successful) { return(readResults); } SkipWhitespace(); if (!StringReader.CanRead() || StringReader.Peek() != NAME_VALUE_SEPARATOR) { return(ReadResults.Failure(JsonCommandError.ExpectedNameValueSeparator().WithContext(StringReader))); } StringReader.Skip(); SkipWhitespace(); readResults = ReadAny(out IJsonArgument argument); if (!readResults.Successful) { return(readResults); } result.Add(name, argument); SkipWhitespace(); if (!StringReader.CanRead() || StringReader.Peek() != ARGUMENT_SEPARATOR) { break; } StringReader.Skip(); } if (!StringReader.CanRead() || StringReader.Peek() != OBJECT_CLOSE_CHARACTER) { return(ReadResults.Failure(JsonCommandError.EndOfInput().WithContext(StringReader))); } StringReader.Skip(); return(ReadResults.Success()); }
public ReadResults ReadArray(out JsonArray result) { result = new JsonArray(); if (!StringReader.CanRead() || StringReader.Peek() != ARRAY_OPEN_CHARACTER) { return(ReadResults.Failure(JsonCommandError.MalformedJson())); } StringReader.Skip(); SkipWhitespace(); ReadResults readResults; while (StringReader.CanRead() && StringReader.Peek() != ARRAY_CLOSE_CHARACTER) { SkipWhitespace(); readResults = ReadAny(out IJsonArgument argument); if (!readResults.Successful) { return(readResults); } result.Add(argument); SkipWhitespace(); if (!StringReader.CanRead() || StringReader.Peek() != ARGUMENT_SEPARATOR) { break; } StringReader.Skip(); } if (!StringReader.CanRead() || StringReader.Peek() != ARRAY_CLOSE_CHARACTER) { return(ReadResults.Failure(JsonCommandError.EndOfInput().WithContext(StringReader))); } StringReader.Skip(); return(ReadResults.Success()); }