使用固定字段名称反序列化固定大小的固定结构,JSON字符串很简单:只需定义一个包含所有字段的类(具有正确的类型和名称,在编译时都已知)。
对可变大小的重复嵌套对进行反序列化更具挑战性,但可以在类中List<>的帮助下完成。
但是如果字段的名称在编译时未知,我该怎么办? e.g:
{
"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字符串,然后在运行时构建类(反射?)中包含这些变量名类对象?看起来太麻烦......也许有一种更健全的方式?
或许类/字段名称与.NET的JavaScriptSerializer无关,所有问题都是类型? (当然是正确的结构)
答案 0 :(得分:3)
你可以比你想象的更简单地做到这一点。你的??????
课可以是任何东西..
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<string,GenericObject>
的对象...
public class SomeContainer
{
public Dictionary<string,GenericObject> container {get;set;}
}
如果您不关心键的名称,则可以循环遍历字典的值。