如何使用变量名反序列化可变大小的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;} }
如果您不关心键的名称,则可以循环遍历字典的值。