1

私は理解できたWebサービスからJSONをGETしようとしています。ところで、これは私のJSONデータでした-

   {
    "X-YZ-111/AB.CD": {
        "P1": "F",
        "P2": "43.46"
    },        

    "X-YZ-112/AB.CD": {
        "P1": "F",
        "P2": "8.02"
    },
    "X-YZ-113/AB.CD": {
        "P1": "F",
        "P2": "9066.58"
    },
    "X-YZ-114/AB.CD": {
        "P1": "F",
        "P2": "6.00"
    },
    "X-YZ-115/AB.CD": {
        "P1": "F",
        "P2": "6.00"
    },        
    "X-YZ-116/AB.CD": {
        "P1": "F",
        "P2": "10.00"
    }}


Using Windows.Data.Json;

private async void getJSON_click(object sender,RoutedEventArgs e)

{ 
   var client=new HttpClient();
   client.MaxResponseBufferSize=1024*1024;
   var response= await Client.GetAsync(new Uri(The URL here));
   var result = await response.Content.ReadAsStringAsync();

   var component=JsonObject.Parse(result);

}

これで、各アイテムに「X-YZ-111/AB.CD」という名前のプロパティがあり、P1 と P2 が他の 2 つのプロパティとして含まれているコレクションに解析しようとすることができます。これを UI でタイルにバインドしようとします。後で CollectionViewSource を使用します。

これは、Json2CShardpDotCom が生成している C# クラスです。

public class Name
{
    public string Type { get; set; }
    public string Val { get; set; }
}

public class Root 
{
    public Name Name { get; set; }
}

foreach を使用してこれらの値をループする方法と、C# でどのクラスを作成する必要があるかについての提案はありますか?

編集 1: ところで、最初に外部ループで foreach を実行して名前を取得し、内部ループで foreach を実行して P1 と P2 を取得する辞書が必要であることを知っています。

しかし、JSON を使用して JSON からコレクション項目を作成するために C# でどのクラスを使用する必要があるかについて混乱しています

4

1 に答える 1

2

JSON を使用し、JSON からコレクション項目を作成するために C# でどのクラスを使用する必要があるかについて混乱しています

クラスは必要ありません。少しだけLinq

これにはJson.Netを使用します

var jObj = JObject.Parse(result);
var dict = jObj.Children()
           .Cast<JProperty>()
           .ToDictionary(p => p.Name, 
                         p => new Tuple<string, string>((string)p.Value["P1"], (string)p.Value["P2"]));

それだけです。サンプルの使用法は次のとおりです。


foreach (var kv in dict)
{
    Console.WriteLine("{0}: {1} {2}", kv.Key, kv.Value.Item1, kv.Value.Item2);
}

編集

JsonObject を使用した同じコード

var jObj = JsonObject.Parse(json);
var dict = jObj.Cast<KeyValuePair<string, JsonValue>>()
           .ToDictionary(j=>j.Key,
                         j=>new Tuple<string,string>(j.Value["P1"],j.Value["P2"]));
于 2013-05-05T09:48:46.057 に答える