4

私はこれに似たJSON応答(私は制御できません)を持っています:

{"response":{
  "a" : "value of a",
  "b" : "value of b",
  "c" : "value of c",
  ...
}}

どこ:

  • 「a」、「b」、「c」は、前もって不明な名前です。
  • アイテムの数はさまざまです。

最後に必要なのは、すべての値の文字列の配列です。名前を保持することはボーナスですが(辞書?)、表示される順序で値を参照する必要があります。

JSON.NETを使用してこれをどのように達成しますか?

4

2 に答える 2

6

JObject名前空間のクラスを使用してNewtonsoft.Json.Linq、オブジェクトをDOMのような構造に逆シリアル化できます。

public class StackOverflow_10608188
{
    public static void Test()
    {
        string json = @"{""response"":{
          ""a"" : ""value of a"",
          ""b"" : ""value of b"",
          ""c"" : ""value of c""
        }}";
        JObject jo = JObject.Parse(json);
        foreach (JProperty property in jo["response"].Children())
        {
            Console.WriteLine(property.Value);
        }
    }
}
于 2012-05-15T20:21:48.413 に答える
1

これは機能しますが、あまりきれいではありません。でjson.netに交換できると思いますJavaScriptSerializer

var json = "{\"response\":{\"a\":\"value of a\",\"b\":\"value of b\",\"c\":\"value of c\"}}";
var x = new System.Web.Script.Serialization.JavaScriptSerializer();
var res = x.Deserialize<IDictionary<string, IDictionary<string, string>>>(json);

foreach (var key in res.Keys)
{
    foreach (var subkey in res[key].Keys)
    {
        Console.WriteLine(res[key][subkey]);
    }
}

また

Console.WriteLine(res["response"]["a"]);
Console.WriteLine(res["response"]["b"]);
Console.WriteLine(res["response"]["c"]);

出力:

value of a
value of b
value of c
于 2012-05-15T20:55:08.670 に答える