Exemple #1
0
        public IEnumerable <NamedJsonBuffer> GetMembers()
        {
            JsonBufferReader reader = CreateReader();

            reader.ReadToken(JsonTokenClass.Object);
            while (reader.TokenClass == JsonTokenClass.Member)
            {
                yield return(new NamedJsonBuffer(reader.Text, reader.BufferValue()));
            }
        }
Exemple #2
0
        /// <summary>
        /// Creates a <see cref="JsonBufferReader" /> object that can be
        /// used to read the content of the buffer.
        /// </summary>
        /// <remarks>
        /// If the buffer contains a JSON null or scalar value then the
        /// returned reader is already started and positioned on the value.
        /// </remarks>

        public JsonBufferReader CreateReader()
        {
            if (IsEmpty)
            {
                throw new InvalidOperationException();
            }
            JsonBufferReader reader = new JsonBufferReader(this);

            if (!IsStructured)
            {
                reader.ReadToken(JsonTokenClass.Array);
            }
            return(reader);
        }
Exemple #3
0
        public int GetMembers(NamedJsonBuffer[] members, int index, int count)
        {
            if (index < 0)
            {
                throw new ArgumentOutOfRangeException("index", index, null);
            }

            JsonBufferReader reader = CreateReader();

            if (!reader.MoveToContent())
            {
                throw new JsonException("Unexpected EOF.");
            }

            if (reader.TokenClass == JsonTokenClass.Null)
            {
                return(0);
            }

            reader.ReadToken(JsonTokenClass.Object);
            int readCount = 0;

            while (reader.TokenClass == JsonTokenClass.Member)
            {
                if (count-- == 0)
                {
                    return(~readCount);
                }

                if (members != null)
                {
                    members[index++] = new NamedJsonBuffer(reader.Text, reader.BufferValue());
                }
                else
                {
                    reader.Skip();
                }

                readCount++;
            }

            return(readCount);
        }
Exemple #4
0
        public int GetArray(JsonBuffer[] values, int index, int count)
        {
            if (index < 0)
            {
                throw new ArgumentOutOfRangeException("index", index, null);
            }

            JsonBufferReader reader = CreateReader();

            if (!reader.MoveToContent())
            {
                throw new JsonException("Unexpected EOF.");
            }

            if (reader.TokenClass == JsonTokenClass.Null)
            {
                return(0);
            }

            reader.ReadToken(JsonTokenClass.Array);
            int readCount = 0;

            while (reader.TokenClass != JsonTokenClass.EndArray)
            {
                if (count-- == 0)
                {
                    return(~readCount);
                }

                if (values != null)
                {
                    values[index++] = reader.BufferValue();
                }
                else
                {
                    reader.Skip();
                }

                readCount++;
            }

            return(readCount);
        }
Exemple #5
0
        public static JsonBuffer From(JsonReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            JsonBufferReader bufferReader = reader as JsonBufferReader;

            if (bufferReader != null)
            {
                return(bufferReader.BufferValue());
            }

            if (!reader.MoveToContent())
            {
                return(Empty);
            }

            if (reader.TokenClass == JsonTokenClass.Member)
            {
                reader.Read();
            }

            bool structured = reader.TokenClass == JsonTokenClass.Array ||
                              reader.TokenClass == JsonTokenClass.Object;

            JsonBufferWriter writer = new JsonBufferWriter();

            writer.WriteFromReader(reader);
            JsonBuffer buffer = writer.GetBuffer();

            if (!structured)
            {
                bufferReader = buffer.CreateReader();
                bufferReader.MoveToContent();
                bufferReader.Read();
                buffer = bufferReader.BufferValue();
            }

            return(buffer);
        }