45

次のようなjsonブロックがあります。

{
    "ADDRESS_MAP":{

        "ADDRESS_LOCATION":{
            "type":"separator",
            "name":"Address",
            "value":"",
            "FieldID":40
        },
        "LOCATION":{
            "type":"locations",
            "name":"Location",
            "keyword":{
                "1":"LOCATION1"
            },
            "value":{
                "1":"United States"
            },
            "FieldID":41
        },
        "FLOOR_NUMBER":{
            "type":"number",
            "name":"Floor Number",
            "value":"0",
            "FieldID":55
        },
        "self":{
            "id":"2",
            "name":"Address Map"
        }
    }
}

このトークンに含まれるすべてのキー アイテムを取得するにはどうすればよいですか。たとえば、上記のコードから、「ADDRESS_LOCATION」、「LOCATION」、「FLOOR_NUMBER」、および「self」が必要です。

4

3 に答える 3

66

を にキャストJTokenJObject、メソッドを使用しProperties()てオブジェクト プロパティのリストを取得できます。そこから、かなり簡単に名前を取得できます。

このようなもの:

string json =
@"{
    ""ADDRESS_MAP"":{

        ""ADDRESS_LOCATION"":{
            ""type"":""separator"",
            ""name"":""Address"",
            ""value"":"""",
            ""FieldID"":40
        },
        ""LOCATION"":{
            ""type"":""locations"",
            ""name"":""Location"",
            ""keyword"":{
                ""1"":""LOCATION1""
            },
            ""value"":{
                ""1"":""United States""
            },
            ""FieldID"":41
        },
        ""FLOOR_NUMBER"":{
            ""type"":""number"",
            ""name"":""Floor Number"",
            ""value"":""0"",
            ""FieldID"":55
        },
        ""self"":{
            ""id"":""2"",
            ""name"":""Address Map""
        }
    }
}";

JToken outer = JToken.Parse(json);
JObject inner = outer["ADDRESS_MAP"].Value<JObject>();

List<string> keys = inner.Properties().Select(p => p.Name).ToList();

foreach (string k in keys)
{
    Console.WriteLine(k);
}

出力:

ADDRESS_LOCATION
LOCATION
FLOOR_NUMBER
self
于 2013-05-28T17:06:22.670 に答える
2

受け取っているjsonの構造を知っている場合は、jsonで受け取っているものを反映したクラス構造を持つことをお勧めします。

次に、このようなものを呼び出すことができます...

AddressMap addressMap = JsonConvert.DeserializeObject<AddressMap>(json);

(json は、問題の json を含む文字列です)

受け取った json の形式がわからない場合は、もう少し複雑になり、おそらく手動で解析する必要があります。

詳細については、http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspxをご覧ください。

于 2013-05-28T15:35:20.733 に答える