C#将Json字符串反序列化为匿名对象

作者:陆金龙    发表时间:2015-08-08 13:12   


有时候,我们从服务端请求到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中的成员数量匹配,但是成员类型必须匹配。