如何使用变量名反序列化可变大小的JSON字符串

使用固定字段名称反序列化固定大小的固定结构,JSON字符串很简单:只需定义一个包含所有字段的类(具有正确的类型和名称,在编译时都是已知的)。

反序列化可变大小的重复嵌套对更具挑战性,但可以在类内部的List 的帮助下完成。

但是,如果在编译时字段的名称未知,我该怎么办? 例如:

{ "container":{ "GD01AB491103":{ "field_id1":11, "field_id2":12, "field_id3":13, "field_id4":"fourteen" }, "DC01AB491103":{ "field_id1":21, "field_id2":22, "field_id3":23, "field_id4":"twenty four" }, "GH01AB451101":{ "field_id1":31, "field_id2":32, "field_id3":33, "field_id4":"thirty four" } . . . }, "terminator" } 

如何反序列化这样的字符串?

(最好使用.NET的JavaScriptSerializer,但如果它太弱/无能力,我可能需要诉诸其他东西)

编辑 :澄清挑战的性质:在上面的例子中,为了定义一个类:

 public class ?????? { public int field_id1 {get;set;} public int field_id2 {get;set;} public int field_id3 {get;set;} public string field_id4 {get;set;} } 

我需要首先查询JSON字符串,然后在运行时使用这些变量名类对象构建类(reflection?)? 看起来太麻烦……也许有一个更健全的方式?

或者类/字段名称与.NET的JavaScriptSerializer无关,所有问题都是类型? (当然是正确的结构)

你可以做的比你想象的更简单..你的?????? class级可以是任何东西..

 public class GenericObject { public int field_id1 {get;set;} public int field_id2 {get;set;} public int field_id3 {get;set;} public string field_id4 {get;set;} } 

然后将对象图的根反序列化为包含Dictionary

 public class SomeContainer { public Dictionary container {get;set;} } 

如果您不关心键的名称,则可以循环遍历字典的值。