2013-05-01 25 views
0

这是JSON我有解析JSON与他们的名字是数

{ 
"productNum":6, 
"01": 
{"US_7":"pna886377847444","US_7_5":"pna886377847529","US_8":"pna886377847604","US_8_5":"pna886377847666","US_9":"pna886377847741","US_9_5":"pna886377847826","US_10":"pna886377847895","US_10_5":"pna886377847987","US_11":"pna886377848069","US_11_5":"pna886377848144","US_12":"pna886377848229","US_13":"pna886377848328","US_14":"pna886377848427"}, 

"02": 
{"US_7":"pna886377849103","US_7_5":"pna886377849202","US_8":"pna886377849295","US_8_5":"pna886377849394","US_9":"pna886377849493","US_9_5":"pna886377849592","US_10":"pna886377849660","US_10_5":"pna886377849745","US_11":"pna886377849820","US_11_5":"pna886377849905","US_12":"pna886377849981","US_13":"pna886377850086","US_14":"pna886377850185"} 
} 

一个更好的视图中的数据对象的动态列表:

Better view

我应该说明什么类解析它?

回答

2

看起来就像你不能变成一个类是因为02是不是有效的属性名称。

您可以尝试使用JObject,它附带Json.Net。它的作用就像一个Dictionary

这里有一个例子:

[Test] 
public void Parse() 
{ 
    const string src = @"{ 
    ""productNum"":6, 
    ""01"": 
    {""US_7"":""pna886377847444"",""US_7_5"":""pna886377847529"",""US_8"":""pna886377847604"",""US_8_5"":""pna886377847666"",""US_9"":""pna886377847741"",""US_9_5"":""p na886377847826"",""US_10"":""pna886377847895"",""US_10_5"":""pna886377847987"",""US_11"":""pna886377848069"",""US_11_5"":""pna886377848144"",""US_12"":""pna88637784 8229"",""US_13"":""pna886377848328"",""US_14"":""pna886377848427""}, 

    ""02"": 
    {""US_7"":""pna886377849103"",""US_7_5"":""pna886377849202"",""US_8"":""pna886377849295"",""US_8_5"":""pna886377849394"",""US_9"":""pna886377849493"",""US_9_5"":""p na886377849592"",""US_10"":""pna886377849660"",""US_10_5"":""pna886377849745"",""US_11"":""pna886377849820"",""US_11_5"":""pna886377849905"",""US_12"":""pna88637784 9981"",""US_13"":""pna886377850086"",""US_14"":""pna886377850185""} 
    }"; 

    // filtering out the "productNum:6" 
    var dest = 
     JsonConvert.DeserializeObject<IDictionary<string, object>>(src) 
     .Where(x => x.Value.GetType() == typeof (JObject)); 


    foreach (var item in dest) 
    { 
     var obj = (JObject) item.Value; 

     Console.WriteLine(item.Key); 

     foreach (var d in obj) 
     { 
      Console.WriteLine("{0}: {1}", d.Key, d.Value); 
     } 
    } 
} 
2

使用json.Net - http://james.newtonking.com/pages/json-net.aspx

除此之外,你的问题太笼统。有很多方法可以去做。简单的方法是创建一个类,将其称为Product它的定义就像是;

public class Product 
{ 
    int productNum; 
    InnerData one; 
    InnerData two; 
} 

你序列之前,改写0102onetwoInnerData应该看起来像;

public class InnerData 
{ 
    string US_1; 
    string US_2; 
    // rest of US_x fields 
} 

然后你可以使用反序列化方法 - http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializingJSON.htm

Product prod1 = jsonConvert.Deserialize<Product>(jsonString); 
1

找到了解决自己:

string jString = File.ReadAllText(@"C:\_junk\funkyJSON.txt"); 
var deserializer = new JavaScriptSerializer(); 
var result = deserializer.DeserializeObject(jString); 
var mapDyn = result as Dictionary<string, object>; 
var valueSize = ((Dictionary<string, object>)mapDyn["01"])["US_7"].ToString(); 
1

使用.NET 4.5的DataContractSerializer的,你可以给一个JSON元素任何变量名称,同时用“名称”属性指定其实际名称。

,以便类可能看起来像:

[DataContract] 
public class MyData 
{ 
    [DataMember(Name="01")] 
    string Var1; 

    ... 
} 

http://msdn.microsoft.com/en-us/library/bb412179.aspx