C#将Json字符串反序列化为匿名对象
有时候,我们从服务端请求到Json格式的字符串串数据,我们希望将其反序列化得到对象方便使用。有可能其中的复合类型是在服务端定义的,我们不想为了反序列化时传递参数的需要而在本地再定义一次类型,此时可以使用NewtonJson的JsonConvert.DeserializeAnonymousType方法将其反序列化为匿名对象。在使用这个方法时,我们需要为其传递一个匿名对象,做为反序列化的类型模版使用。
代码示例如下:
var strJson=GetJsonFromService();
var anonymousTemplate = new
{
A= 0,
B = false,
C="",
D=new {
DmenberA="",
DmenberA=0
}
};
var obj = JsonConvert.DeserializeAnonymousType(strJson, anonymousTemplate);
说明:
1.anonymousTemplate是可以嵌套定义的,如上述anonymousTemplate对象中对D的赋值。
2.anonymousTemplate中的成员可以比strJson中的复合类型的成员多或者少,反序列化时不会报错。
anonymousTemplate多出的成员,在strJson没有对应的数据,会使用默认的值如:null等;
strJson数据中有而anonymousTemplate中没有定义成员,反序列化时就会忽略该数据项。
因此anonymousTemplate的成员定义可以根据自己的需要而定,不一定完全于strJson中的成员数量匹配,但是成员类型必须匹配。