Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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());
        }