[.Net码农]用Json.NET将json字符串反序列化为json匿名对象

http://www.cnblogs.com/scottckt/archive/2011/12/14/2287471.html




 首先定义一个匿名对对象,并序列化成Json,用于测试。 如何将这个Josn字符串转换为JSON对象呢?如果先创建一个类的话,那就太累了。
复制代码
var o =  new
{
   a =  1,
   b =  " Hello, World! ",
   c =  new[] {  123 },
   d =  new Dictionary< stringint> { {  " x "1 }, {  " y "2 } }
};

var json = JsonConvert.SerializeObject(o);
复制代码
 

第一种做法(匿名类):

var anonymous =  new { a =  0, b = String.Empty, c =  new  int[ 0], d =  new Dictionary< stringint>() };
var o2 = JsonConvert.DeserializeAnonymousType(json, anonymous);

Console.WriteLine(o2.b);
Console.WriteLine(o2.c[ 1]);


 

第二种做法(匿名类):

 

var o3 = JsonConvert.DeserializeAnonymousType(json,  new { c =  new  int[ 0], d =  new Dictionary< stringint>() });
Console.WriteLine(o3.d[ " y "]);

    DeserializeAnonymousType 只是借助这个匿名对象参数(anonymous) 反射类型而已,也就是说它和反序列化结果并非同一个对象。正如 o3 那样,我们也可以只提取局部信息。

 

第三种做法(索引器):

 

     实际上,我们也可以直接反序列化为 JObject,然后通过索引器直接访问。JObject、JProperty 等都继承自 JToken,它重载了基元类型转换操作符,我们可以直接得到实际结果。

var o2 = JsonConvert.DeserializeObject(json)  as JObject;

Console.WriteLine(( int)o2[ " a "]);
Console.WriteLine(( string)o2[ " b "]);
Console.WriteLine(o2[ " c "].Values().Count());
Console.WriteLine(( int)o2[ " d "][ " y "]);

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值