/// <summary>
            /// Initializes the current instance from a JSON document using the specified JSON reader.
            /// </summary>
            /// <param name="data">The UTF-8 encoded JSON document being deserialized.</param>
            /// <param name="reader">The JSON reader used during deserialization.</param>
            internal void InitFromJson(byte[] data, ref Utf8JsonReader reader)
            {
                Debug.Assert(reader.TokenType == JsonTokenType.StartObject);

                string propertyName = null;

                while (reader.Read())
                {
                    switch (reader.TokenType)
                    {
                    case JsonTokenType.PropertyName:
                    {
                        propertyName = mPool.GetStringFromUtf8(reader.ValueSpan);
                        break;
                    }

                    case JsonTokenType.String:
                    {
                        switch (propertyName)
                        {
                        case "type":
                            mTypeProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "reason":
                            mReasonProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "index_uuid":
                            mIndexUuidProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "shard":
                            mShardsProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "index":
                            mIndexProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;
                        }

                        break;
                    }

                    case JsonTokenType.EndObject:
                    {
                        return;
                    }

                    default:
                    {
                        // unexpected token, skip!
                        reader.Skip();
                        break;
                    }
                    }
                }

                throw new ArgumentException("The reader did not deliver a closing 'EndObject'.");
            }
Ejemplo n.º 2
0
            /// <summary>
            /// Initializes the current instance from a JSON document using the specified JSON reader.
            /// </summary>
            /// <param name="data">The UTF-8 encoded JSON document being deserialized.</param>
            /// <param name="reader">The JSON reader used during deserialization.</param>
            internal void InitFromJson(byte[] data, ref Utf8JsonReader reader)
            {
                Debug.Assert(reader.TokenType == JsonTokenType.StartObject);

                string propertyName = null;

                while (reader.Read())
                {
                    switch (reader.TokenType)
                    {
                    case JsonTokenType.PropertyName:
                    {
                        propertyName = mPool.GetStringFromUtf8(reader.ValueSpan);
                        break;
                    }

                    case JsonTokenType.String:
                    {
                        switch (propertyName)
                        {
                        case "_index":
                            mIndexProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "_type":
                            mTypeProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;

                        case "_id":
                            // changes with every document, do not cache!
                            mIdProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, false);
                            break;

                        case "result":
                            mResultProxy.Update(data, (int)reader.TokenStartIndex + 1, reader.ValueSpan.Length, true);
                            break;
                        }

                        break;
                    }

                    case JsonTokenType.Number:
                    {
                        switch (propertyName)
                        {
                        case "_version":
                            mVersionProxy = new Int32PropertyProxy(data, (int)reader.TokenStartIndex, reader.ValueSpan.Length);
                            break;

                        case "_seq_no":
                            mSequenceNumberProxy = new Int32PropertyProxy(data, (int)reader.TokenStartIndex, reader.ValueSpan.Length);
                            break;

                        case "_primary_term":
                            mPrimaryTermProxy = new Int32PropertyProxy(data, (int)reader.TokenStartIndex, reader.ValueSpan.Length);
                            break;

                        case "status":
                            mStatusProxy = new Int32PropertyProxy(data, (int)reader.TokenStartIndex, reader.ValueSpan.Length);
                            break;
                        }

                        break;
                    }

                    case JsonTokenType.StartObject:
                    {
                        switch (propertyName)
                        {
                        case "_shards":
                        {
                            var model = mPool.GetBulkResponseItemIndexShards();
                            model.InitFromJson(data, ref reader);
                            Shards = model;
                            break;
                        }

                        case "error":
                        {
                            var model = mPool.GetBulkResponseItemIndexError();
                            model.InitFromJson(data, ref reader);
                            Error = model;
                            break;
                        }

                        default:
                            // unexpected property, skip all children!
                            reader.Skip();
                            break;
                        }

                        break;
                    }

                    case JsonTokenType.EndObject:
                    {
                        return;
                    }

                    default:
                    {
                        // unexpected token, skip!
                        reader.Skip();
                        break;
                    }
                    }
                }

                throw new ArgumentException("The reader did not deliver a closing 'EndObject'.");
            }