JsonReader
は、順方向読み取り専用です。最初から完全に再解析することなく、早期段階に「巻き戻し」する方法はありません。以前の情報を見ることができるようにしたいのであれば、それを読んで変数に格納する必要があります。
JsonReader
は、特定のトークンの子をスキップするために使用できるSkip
メソッドを提供します。したがって、興味のないプロパティの名前を読み、次のトークンがオブジェクトまたは配列の開始点である場合は、Skip
を使用して、そのオブジェクトまたは配列の最後のトークンに直接移動できます。
以下は、この手法を使用してJSONオブジェクトのルートプロパティ名だけを読み込み、すべての値をスキップする簡単な例です。
string json = @"
{
""resultCode"": 200,
""message"": ""OK"",
""searchTerms"": [
{
""attribute"": ""keywords"",
""operator"": ""contains"",
""values"": [ ""ipsum"" ]
}
],
""count"": 2,
""items"": [
{
""id"": 1,
""name"": ""foo"",
""sizes"": [ ""small"", ""meduim"", ""large"" ],
""description"": ""Lorem ipsum dolor sit amet""
},
{
""id"": 2,
""name"": ""bar"",
""sizes"": [ ""tiny"", ""huge"" ],
""description"": ""Neque porro quisquam est qui dolorem ipsum""
}
]
}";
using (StringReader sr = new StringReader(json))
using (JsonTextReader reader = new JsonTextReader(sr))
{
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName)
{
string propName = (string)reader.Value;
Console.WriteLine(propName);
// advance to property value
reader.Read();
// if the value is an object or array, skip over its children
if (reader.TokenType == JsonToken.StartObject ||
reader.TokenType == JsonToken.StartArray)
reader.Skip();
}
}
}
出力:
resultCode
message
searchTerms
count
items
フィドル:https://dotnetfiddle.net/qfejWk