/// <summary> /// 配列をデコードする。 /// </summary> /// <returns>デコード結果のオブジェクト</returns> object DecodeArray() { // 現在のオブジェクトとプロパティ名を退避 var prevTarget = _currentTarget; var prevPropertyName = _currentPropertyName; // オブジェクトを生成 var obj = _mapper.CreateArray(_currentTarget, _currentPropertyName); // 配列の場合、プロパティ名はなし _currentTarget = obj; _currentPropertyName = null; // 各要素を読み込む while (true) { // 要素を読み込む var token = _tokenizer.ReadToken(); if (token.Type == JsonTokenType.RightSquareBracket) { break; // [...,]という記述か、空の配列[] } var value = DecodeElement(token); // 配列に要素を追加 _mapper.AddElement(obj, value); // 次のトークンが','なら次の要素を読み込む。']'なら配列の定義を終了 token = _tokenizer.ReadToken(); if (token.Type == JsonTokenType.RightSquareBracket) { break; } if (token.Type != JsonTokenType.Comma) { throw new JsonException("',' or ']' expected", token.Position); } } // 現在のオブジェクトとプロパティ名を戻す _currentTarget = prevTarget; _currentPropertyName = prevPropertyName; return(obj); }