2013-05-04 74 views
1

我想从一个web服务获取JSON,这是我能够弄清楚的。 顺便说一句这是我的JSON数据 -解析JSONObject

{ 
    "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个属性,我将尝试使用CollectionViewSource稍后绑定到UI中的Tile。

现在这是C#类Json2CShardpDotCom正在产生

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。

但我很困惑就应该使用什么类在C#中使用JSON和创建集合项目我的JSON的

+0

这看起来像C#,大概.NET 4.5相同的代码(由于'async'),可以你可以这样标记吗? – 2013-05-04 20:50:37

回答

2

我很困惑关于什么班,我应该在C#中使用消耗JSON和创建从我的JSON收集项目

您不需要任何类。只是一点点的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"])); 
+0

嗨,我有这个问题。现在我怎样才能实现在词典上的iObservable集合,并将其绑定到一系列文本块或按钮,并使它们显示每个对象使用ToString覆盖 – 2013-05-06 09:49:32

+0

@ james234它是完全不同的问题。如何将它作为新问题发布。其他人可能回答更好。 – I4V 2013-05-06 10:26:26