internal Enumerator(JsonObject obj) { if (obj.Type != JsonValueType.Object) { JsonThrowHelper.ThrowInvalidOperationException(); } _obj = obj; Current = default; _index = 0; }
public bool MoveNext() { DbRow row = _obj.GetRow(); if (row.JsonType == JsonType.StartObject) { if (_index < _obj.Size - 1) { _index++; row = _obj.GetRow(_index); if (row.JsonType != JsonType.String) { JsonThrowHelper.ThrowInvalidOperationException(); } _index++; DbRow nextRow = _obj.GetRow(_index); if (!nextRow.IsSimpleValue && nextRow.SizeOrLength != 0) { Current = _obj.CreateJsonObject(_index * DbRow.Size, DbRow.Size * (nextRow.NumberOfRows + 1)); _index += nextRow.NumberOfRows; } else { Current = _obj.CreateJsonObject(_index * DbRow.Size, DbRow.Size); } return(true); } } else if (row.JsonType == JsonType.StartArray) { if (_index < _obj.Size) { _index++; DbRow nextRow = _obj.GetRow(_index); if (!nextRow.IsSimpleValue && nextRow.SizeOrLength != 0) { Current = _obj.CreateJsonObject(_index * DbRow.Size, DbRow.Size * (nextRow.NumberOfRows + 1)); _index += nextRow.NumberOfRows; } else { Current = _obj.CreateJsonObject(_index * DbRow.Size, DbRow.Size); } return(true); } } return(false); }