.NET中常用的几种解析JSON方法
一、基本概念
json是什么?
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
序列化和反序列化是怎么回事?
序列化: 将数据结构或对象转换成二进制串的过程
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
如何:对 JSON 数据进行序列化和反序列化?
1、定义 Person 的数据协定
通过将 DataContractAttribute 附加到类并将 DataMemberAttribute 特性附加到要序列化的成员,为Person定义数据协定。
- [DataContract]
- internal class Person
- {
- [DataMember]
- internal string name;
- [DataMember]
- internal int age;
- }
2、将 Person 类型的实例序列化为 JSON
3、从 JSON 反序列化 Person 类型的实例
更多参考:
https://msdn.microsoft.com/zh-cn/library/bb412179.aspx
https://msdn.microsoft.com/zh-cn/library/bb412170.aspx
二、.NET中常用的几种解析JSON方法
名称 | 类库 | 使用场景 | linq支持 |
System.Runtime.Serialization.Json | DataContractJsonSerializer | 全部 | No |
System.Web.Script.Serialization | JavaScriptSerializer | web | No |
System.Json | JsonArray、JsonObject、JsonValue | Silverlight | Yes |
Newtonsoft.Json | JsonConvert、JArray、JObject、JValue | 全部 | Yes |
1、DataContractJsonSerializer
.NET Framwork3.5自带的System.Runtime.Serialization.Json可很好的完成JSON的解析,不需要使用第三方库。
添加引用System.Runtime.Serialization,然后使用 using System.Runtime.Serialization.Json;
相应的序列化的类,注意下面类加的Attribute,比如:
- /// <summary>
- /// 异常对象
- /// </summary>
- [DataContract]
- internal class Ex
- {
- [DataMember]
- public string HelpLink { get; set; }
- [DataMember]
- public int HResult { get; set; }
- [DataMember]
- public string Message { get; set; }
- [DataMember]
- public string Source { get; set; }
- [DataMember]
- public string StackTrace { get; set; }
- }
json帮助类
- /// <summary>
- /// json 帮助类
- /// </summary>
- internal class JsonHelper
- {
- //JSON字符串转对象
- public static T JsonToT<T>(string json)
- {
- var ser = new DataContractJsonSerializer(typeof(T));
- var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
- stream.Position = ;
- return (T)ser.ReadObject(stream);
- }
- //对象转化为JSON字符串
- public static string TtoJson<T>(T obj)
- {
- var ser = new DataContractJsonSerializer(typeof(T));
- var stream = new MemoryStream();
- ser.WriteObject(stream, obj);
- var db = new byte[stream.Length];
- stream.Position = ;
- stream.Read(db, , (int)stream.Length);
- var dataString = Encoding.UTF8.GetString(db);
- return dataString;
- }
- }
使用:
- var t = JsonHelper.jsonToT<T>(jsonstr);
- var jsonstr=JsonHelper.TtoJson<T>(T);
更多内容请参考:https://msdn.microsoft.com/zh-cn/library/bb907644.aspx
2、JavaScriptSerializer
using System.Web.Script.Serialization;
- var jsSerializer = new JavaScriptSerializer();
- var json= jsSerializer.Serialize(T);
- var T = jsSerializer.Deserialize<T>(json);
更多请参考:http://msdn.microsoft.com/zh-cn/library/bb359469.aspx
3、System.Json
- // using System.Json
- var css = "{ \"#header\" : {background:\"red\"}, layout : [5,4,1],color:\"cyan\" }";
- var style = JsonObject.Parse(css) as JsonObject;
- (
- from s in style
- where s.Key == "color"
- select (string)s.Value
- ).First().ToString();
- // "cyan"
- // 更多操作
- style["layout"][] = ;
- var hd = style["#header"];
- style["body>div+p"] = hd;
- style.Remove("#header");
- var bd = new JsonObject();
- bd["border"] = "1px solid cyan";
- style["body>div+p"]["#meta"] = bd;
- style.ToString();
- // {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}}
更多请参考:http://msdn.microsoft.com/zh-cn/library/cc626400%28v=VS.95%29.aspx
4、JSON.NET
json帮助类
- public class JsonHelper
- {
- /// <summary>
- /// 对象转换为JSON字符串
- /// </summary>
- /// <param name="item"></param>
- /// <returns></returns>
- public static string ObjectToJson(object item)
- {
- string res = JsonConvert.SerializeObject(item);
- return res;
- }
- /// <summary>
- /// JSON转换为对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="jsonString"></param>
- /// <returns></returns>
- public static T JsonToObject<T>(string jsonString)
- {
- T res = JsonConvert.DeserializeObject<T>(jsonString);
- return res;
- }
- }
更多请参考:http://www.newtonsoft.com/json/help/html/Introduction.htm
.NET中常用的几种解析JSON方法的更多相关文章
- iOS中常用的四种数据持久化方法简介
iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...
- python中常用的九种数据预处理方法分享
Spyder Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...
- JavaScript中常用的几种类型检测方法
javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- 【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python编程中常用的12种基础知识总结
原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...
- 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...
- 开发中常用的几种 Content-Type
开发中常用的几种 Content-Type application/x-www-form-urlencoded 浏览器的原生 form 表单,如果不设置,那么最终就会以 application/x-w ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
随机推荐
- 网站的SEO
提高网站SEO排名的策略除了要有高质量的内容,还有几种方案可以使用 1.关键词的设定 合适的关键词可以提升搜索引擎中的排名 ①最重要的是html中的title标签,这也是一个页面的最重要的概括,所以尽 ...
- ARP协议的报文格式
原文链接地址:http://www.cnblogs.com/laojie4321/archive/2012/04/12/2444187.html 结构ether_header定义了以太网帧首部:结 ...
- SQLServerDBA十大必备工具---让生活轻松点(转)
曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了: 诚然,SSMS和Profile足够强大,工作的大 ...
- Ubuntu15.04装机配置脚本
#!/bin/bash echo "vim" sudo apt-get install vim cp -r ./vim/.vim ~/ cp ./vim/.vimrc ~/ ech ...
- 手工搭建Openvpn
环境: CentOS 6.4 (final) x86_x64 gcc-4.4.7-16.el6.x86_64 gcc-c++-4.4.7-16.el6.x86_64 lzo-2.03-3.1.e16_ ...
- 写一个iOS VoIP应用需要知道什么?
IOS编程--VoIP解密 一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是I ...
- Redis安全访问
限制IP(只能一个) # If you want you can bind a single interface, if the bind option is not # specified all ...
- putty 访问 vmware中ubuntu 方法
putty访问虚拟机 从宿主机中用putty连接虚拟机中的Ubuntu. putty默认使用ssh方式连接,这需要在Ubuntu Server中安装ssh服务.使用命令sudo apt-get ...
- 安装多个版本的unity
版本特性导致新版本Unity打开老版本的项目工程报错,所以最好在电脑上安装多个不同版本的Unity 方法一 安装目录命名:Unity_3.5 , Unity_4.3.1 确保默认例子的安装路径分开C: ...
- Android ant自动打包 crunch 报错
解决办法: 修改SDK_HOME/tool/ant/build.xml. <property name="aapt.ignore.assets" value="&l ...