使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html

1 string jsonStr = "{\"data\": {\"ssoToken\": \"70abd3d8a6654ff189c482fc4842468c\",\"account\":\"admin\",\"userType\":\"platformAdmin\",\"realName\": \"超级管理员\",\"sex\": 0,\"sexName\":\"男\",\"email\":\"alina_dong@163.com\",\"mobile\":\"15120757948\",\"createdDt\": \"2013-08-16 00:00:00\",\"updatedDt\": \"2014-12-10 00:00:00\" },\"isSuccess\": true}"; 

当 .Net 程序接收到了这段JSON字符串数据的时候,大家肯定会想到使用 Newtonsoft.Json 去序列化(SerializeObject)和反序列化(DeserializeObject)一个对象。

使用 SerializeObject 的示例:

复制代码

 1 A a = new A();
 2 a.age = 11;
 3 a.name = "Jack";
 4 B b = new B();
 5 b.sex = "Man";
 6 //b.money = 12;
 7 a.B = b;
 8 string str = Newtonsoft.Json.JsonConvert.SerializeObject(a);
 9 
10 输出结果:{"age": 11, "name": "Jack", "B": {"sex": "Man", "money": ""}}

复制代码

使用 DeserializeObject 的示例:

1 string jsonStr = @"{"age": 11, "name": "Jack", "B": {"sex": "Man", "money": ""}}";
2 var a = Newtonsoft.Json.JsonConvert.DeserializeObject<A>(jsonStr);
3 
4 结果:a.age = 11;.......

好了,言归正传,如何使用 dynamic 去解析一个Json字符串呢?

1 string jsonStr = "{\"data\": {\"ssoToken\": \"70abd3d8a6654ff189c482fc4842468c\",\"account\":\"admin\",\"userType\":\"platformAdmin\",\"realName\": \"超级管理员\",\"sex\": 0,\"sexName\":\"男\",\"email\":\"alina_dong@163.com\",\"mobile\":\"15120757948\",\"createdDt\": \"2013-08-16 00:00:00\",\"updatedDt\": \"2014-12-10 00:00:00\" },\"isSuccess\": true}"; 
2 var loginInfo = JsonConvert.DeserializeObject<dynamic>(jsonStr); 
3 var user = loginInfo.data;
4 string ssoToken = user.ssoToken;
5 string account = user.account;

这样,不用创建loginInfo,user照样能解析JSON,而且不会因为那边增加字段报错啦。

 

http://www.cnblogs.com/chsword/archive/2012/10/09/jdynamic_testcase.html

JDynamic :支持Json反序列化为Dynamic对象

2010年 .NET 4.0 发布前后,从3.5向4.0迁移,那时也有一些异构系统的需求,主要是和PHP打交道,通信使用的HTTP 格式为JSON。

不过因为接口比较多,也没有统一规范,PHP端相对是制定接口的一方,所以.NET中反序列化时就显得被动了一些。

当时看中了Dynamic方便使用的优势,并以ASP.NET MVC中 ViewBag->ViewData的转换为参考,制定了一些简单的测试用例,后期就是完善了这些测试用例,使之可以成为一个简单易用的工具类。

最近整理了一下,把这个工具类放到了Codeplex上 http://jdynamic.codeplex.com/

以下是一些测试用例:

一、直接获取值

dynamic json = new JDynamic("1");
json.Value //这样就可以读到1

二、JSON对象

dynamic json = new JDynamic("{a:'abc'}");
json.a 可以得到字符串 "abc"
dynamic json = new JDynamic("{a:3.1416}");
json.a 的值是 3.1416m
dynamic json = new JDynamic("{a:1}");
json.a 的值是 1

三、集合

dynamic json = new JDynamic("[1,2,3]");
json.Length/json.Count 这两个属性是 3
也可以使用下标来读取: json[0]/ json[2]
dynamic json = new JDynamic("{a:[1,2,3]}");
可以这样来读取 json.a[0]/ json.a[2] 

dynamic json = new JDynamic("[{b:1},{c:1}]");
可以这样来读取int的值  json[0].b/json[1].c

四、嵌套JSON对象

dynamic json = new JDynamic("{a:{a:1} }");
json.a.a 可以读出值1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值