C# 使用名称为数字的动态对象列表解析JSON

C# 使用名称为数字的动态对象列表解析JSON,c#,.net,json,C#,.net,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_

这是我的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"}
}
更好地查看数据:

我应该描述什么类来解析它?

使用json.Net-

除此之外,你的问题太笼统了。有很多方法可以做到这一点。简单的方法是创建一个类,称它为
Product
,它的定义是什么

 public class Product
 {
     int productNum;
     InnerData one;
     InnerData two;
 }
 public class InnerData
 {
     string US_1;
     string US_2;
     // rest of US_x fields
 }
序列化之前,请将
01
02
重写为
1
2
InnerData
应该看起来像

 public class Product
 {
     int productNum;
     InnerData one;
     InnerData two;
 }
 public class InnerData
 {
     string US_1;
     string US_2;
     // rest of US_x fields
 }
然后可以使用反序列化方法-

Product prod1=jsonConvert.Deserialize(jsonString);
使用json.Net-

除此之外,你的问题太笼统了。有很多方法可以做到这一点。简单的方法是创建一个类,称它为
Product
,它的定义是什么

 public class Product
 {
     int productNum;
     InnerData one;
     InnerData two;
 }
 public class InnerData
 {
     string US_1;
     string US_2;
     // rest of US_x fields
 }
序列化之前,请将
01
02
重写为
1
2
InnerData
应该看起来像

 public class Product
 {
     int productNum;
     InnerData one;
     InnerData two;
 }
 public class InnerData
 {
     string US_1;
     string US_2;
     // rest of US_x fields
 }
然后可以使用反序列化方法-

Product prod1=jsonConvert.Deserialize(jsonString);

看起来您无法将其转换为类,因为
02
不是有效的属性名称

您可以尝试使用随附的
JObject
。它的作用很像一本
字典

以下是一个示例:

[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);
        }
    }
}
[测试]
公共空解析()
{
常量字符串src=@”{
“productNum”:6,
""01"":
“我们的7个U U U 8”“我们的8个U 8”“我们的7个U U 7 7 7 7 7”“我们的8”“我们的U 8”“我们我们的8个U 8”“我们的7 7 7 7”“我们的7 7 7 7”“我们的8个U 7”“我们的8个U 7”“我们的7 7 7”“我们的7 7”“我们的7”“以下以下以下以下以下前言前言:“我们的7”“我们的7”“我们我们我们的7 7 7 7 7”“以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下几几几几几”“我们我们我们的7”“我们我们我们的7”“我们的7”“我们我们我们我们我们我们的7 7”“我们我们我们我们的7 7 7 7”“以下以下以下前言前言前言前言前言前言前言前言前言::::::::::::::::::::::::“我们我们我们我们我们我们我们我们我们我们的7”“我们我们我们我们我们的7”“我们我们我们的7 7 7 12英寸:pna88637784 8229英寸“US_13”:“pna886377848328”、“US_14”:“PNA8863778427”,
""02"":
“我们的7个U U U 8”“我们的8个U 8”“我们的7个U 8”“我们的8”“我们我们的8”“我们的8”“我们的8”“我们的8”“我们的8个U 8”“我们的8个U 7 7”“我们的8个U 7”“我们的8个U 7”“我们的7 7”“我们的7”“我们的7”“我们的7”“3”“我们的7”“3”“3”“3”“我们的7”“3”“我们的7”“3”“我们的7”“3”“我们的7”“我们我们的7”“3”“以下以下以下以下以下以下以下以下以下以下以下以下以下以下前言前言前言前言前言前言前言前言前言前言:3”“我们的7”“我们的7”“我们的7”“我们的7”“我们我们的7”“3”“我们我们我们的7”“我们我们我们我们的7”“我们的7”“3”“3”“3”“3”“3”“3”“3”“3”“3”“我们的7”“3”“我们的7”“3”“3”“3”“3”“3”“3”“3”“12'':“pna88637784 9981”US_13”“:“pna886377850086”“US_14”“:“pna886377850185”“)
}";
//过滤掉“productNum:6”
var目的地=
JsonConvert.DeserializeObject(src)
其中(x=>x.Value.GetType()==typeof(JObject));
foreach(目标中的var项目)
{
var obj=(JObject)项值;
控制台。写入线(项。键);
foreach(obj中的var d)
{
Console.WriteLine(“{0}:{1}”,d.Key,d.Value);
}
}
}

看起来您无法将其转换为类,因为
02
不是有效的属性名称

您可以尝试使用随附的
JObject
。它的作用很像
字典

以下是一个示例:

[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);
        }
    }
}
[测试]
公共空解析()
{
常量字符串src=@”{
“productNum”:6,
""01"":
“我们的7个U U U 8”“我们的8个U 8”“我们的7个U U 7 7 7 7 7”“我们的8”“我们的U 8”“我们我们的8个U 8”“我们的7 7 7 7”“我们的7 7 7 7”“我们的8个U 7”“我们的8个U 7”“我们的7 7 7”“我们的7 7”“我们的7”“以下以下以下以下以下前言前言:“我们的7”“我们的7”“我们我们我们的7 7 7 7 7”“以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下以下几几几几几”“我们我们我们的7”“我们我们我们的7”“我们的7”“我们我们我们我们我们我们的7 7”“我们我们我们我们的7 7 7 7”“以下以下以下前言前言前言前言前言前言前言前言前言::::::::::::::::::::::::“我们我们我们我们我们我们我们我们我们我们的7”“我们我们我们我们我们的7”“我们我们我们的7 7 7 12英寸:“pna88637784 8229”“美国13”:“pna886377848328”,“美国14”:“PNA8863778427”,
""02"":
“我们的7个U U U 8”“我们的8个U 8”“我们的7个U 8”“我们的8”“我们我们的8”“我们的8”“我们的8”“我们的8”“我们的8个U 8”“我们的8个U 7 7”“我们的8个U 7”“我们的8个U 7”“我们的7 7”“我们的7”“我们的7”“我们的7”“3”“我们的7”“3”“3”“3”“我们的7”“3”“我们的7”“3”“我们的7”“3”“我们的7”“我们我们的7”“3”“以下以下以下以下以下以下以下以下以下以下以下以下以下以下前言前言前言前言前言前言前言前言前言前言:3”“我们的7”“我们的7”“我们的7”“我们的7”“我们我们的7”“3”“我们我们我们的7”“我们我们我们我们的7”“我们的7”“3”“3”“3”“3”“3”“3”“3”“3”“3”“我们的7”“3”“我们的7”“3”“3”“3”“3”“3”“3”“3”“12'':“pna88637784 9981”US_13”“:“pna886377850086”“US_14”“:“pna886377850185”“)
}";
//过滤掉“productNum:6”
var目的地=
JsonConvert.DeserializeObject(src)
其中(x=>x.Value.GetType()==typeof(JObject));
foreach(目标中的var项目)
{
var obj=(JObject)项值;
控制台。写入线(项。键);
foreach(obj中的var d)
{
Console.WriteLine(“{0}:{1}”,d.Key,d.Value);
}
}
}

我自己找到了一个解决方案:

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();
string jString=File.ReadAllText(@“C:\\u junk\funkyJSON.txt”);
var反序列化器=新的JavaScriptSerializer();
var result=反序列化器.反序列化对象(jString);
var mapDyn=结果作为字典;
var valueSize=((字典)mapDyn[“01”])[“US_7”]。ToString();

我自己找到了一个解决方案:

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();
string jString=File.ReadAllText(@“C:\\u junk\funkyJSON.txt”);
var反序列化器=新的JavaScriptSerializer();
var result=反序列化器.反序列化对象(jString);
var mapDyn=结果作为字典;
var valueSize=((字典)mapDyn[“01”])[“US_7”]。ToString();

使用.Net 4.5的DataContractSerializer,您可以为JSON元素指定任何变量名,同时使用“name”属性指定其实际名称

所以你的班级看起来像:

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

     ...
}

使用.Net 4.5的DataContractSerializer,您可以为JSON元素指定任何变量名,同时使用“name”属性指定其实际名称

所以你的班级看起来像:

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

     ...
}