使用 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.
使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象的更多相关文章
- JDynamic :支持Json反序列化为Dynamic对象
JDynamic :支持Json反序列化为Dynamic对象 2010年 .NET 4.0 发布前后,从3.5向4.0迁移,那时也有一些异构系统的需求,主要是和PHP打交道,通信使用的HTTP 格 ...
- C# Newtonsoft.Json反序列化为dynamic对象之后的使用
通过Newtonsoft.Json将一个json类型的字符串反序列化为dynamic后直接使用报错 源代码: namespace ConsoleApplication1 { class Program ...
- JavaScript:将key和value不带双引号的JSON字符串转换成JSON对象的方法
遇到相关的问题,花了两天的时间来解决,深感来之不易,所以做如下的总结,希望遇到此问题的码农能更快的找到解决办法! var jsonArr= [{col:TO_CHAR(HZRQ,'YYYYMM'),t ...
- HttpServletResponse 返回的json数据不是json字符串,而是json对象
今天在改一个bug 情况: 在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 . 在正常情况下,从其它 ...
- js将json字符串转化成json对象的方法
js将json字符串转化成json对象的方法: JSON.parse(jsonObject)
- json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值
一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想的数据交换格式. 同时,json是jav ...
- 特殊字符导致json字符串转换成json对象出错
在对数据库取出来的数据(特别是描述信息)里面含有特殊字符的话,使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引号,回车换行等影响明显,左尖括号和右尖括号也会导致显示问 ...
- json字符串转成 json对象 json对象转换成java对象
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...
- Groovy 读取json文件,并用gson反序列化为List集合
Groovy 读取json文件,并用gson反序列化 package com.bicycle.util import bicycle_grails.StationInfo import com.goo ...
随机推荐
- 使用crosswalk优化ionic2应用包
ionic plugin add cordova-plugin-crosswalk-webview --save
- Android Studio运行SlidingView报错 FloatMath函数
1,错误信息时这样的(图片百度的,但是提醒的是一样的) 我们点击这个错误提示,就会跳到出错的地方 2,开始的时候觉得很蛋疼,因为这个SlidingView是从别处导过来的,没什么问题把...就很久就 ...
- COMP9020
outline: numbers, sets, functions week 1logic week 2–3relation theory week 5–6graphs and trees week ...
- 样式PC和手机页面
/*媒体查询--当页面大于1200px时*/ @media (min-width: 1200px) { } /*在922和1199像素之间的屏幕里,中等屏幕*/ @media (min-width: ...
- JAVAWEB学习总结 HTTPSERVLETRESPONSE对象(二)
一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类 步骤: 1. 在内存中创建一张图片 2.得到图片 ...
- shader forge卡通渲染!
自从用了shader forge,妈妈我再也不写shader了...... 写了3种,分别用的顶点法线.法线贴图.顶点法线+法线贴图,然后还有自发光和受光两种模式,那就是6种了吧... 最后来一张sh ...
- Device eth0 does not seem to be present, delaying initialization(解决克隆CentOS6.3虚拟机后网卡设备无法启动问题)
1.删除 /etc/udev/rules.d/70-persistent-net.rules 后重启机器 2.重新启动之后,把/etc/udev/rules.d/70-persistent-net.r ...
- 通过Cloudera在hadoop生态圈中安装Sentry服务。
写在张文章时,差点辣死我了.把sentry数据库密码搞掉了,导致hive,impala,hue都挂了.此事要引以为戒,以后要小心操作了. 安装Sentry服务 a) 在c ...
- 使用ssh key的方式建立和git服务器的通信
1.以前大家好像都在用https的方式同git来同步代码,但是到了新公司后,主管说要配ssh key,所以大概了解一下 An SSH key allows you to establish a sec ...
- 事件委托能够优化js性能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...