Json.Net6.0入门学习试水篇
前言
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
它所具有的特性:
1、Flexible JSON serializer for converting between .NET objects and JSON ——灵活的JSON序列化器用于实现.NET对象与JSON的转换
2、LINQ to JSON for manually reading and writing JSON ——LINQ to JSON用于手动读写Json
3、High performance, faster than .NET's built-in JSON serializers——高性能,比.NET内置的JSON序列化程序速度要更快
4、Writes indented, easy to read JSON ——缩排书写,使得Json易读
5、Convert JSON to and from XML——支持JSON 与 XML 两种格式相互转换
6、Supports .NET 2 .NET 3.5 .NET 4, Silverlight, Windows Phone and Windows 8——支持.NET2.NET3.5.NET4,Silverlight,Windows Phone和Windows 8
在.Net中内置了读写Json的对象就是 DataContractJsonSerializer 和 JavaScriptSerializer这两个。但是这个是在.Net 3.5之后才支持的。并且性能上并不优秀。
性能对比图如下:

这是Json.Net 5与.NET内置对象的性能对比图,而现在Json.Net的版本已经到达了Version 6.0.1 ,相信它会有更好的表现。JSON.NET是开源的,下载地址:http://json.codeplex.com/,这里有完整的源代码,当然也可以参考http://james.newtonking.com/ 这里。
当然通过VS进入Nuget管理包也可以进行下载Json.Net的程序包

下面我们来简单的通过实例进行初步了解JSON.NET。
1、序列化一个对象为json字符串。
2、然后再将字符串反序列化为对象。
3、JSON与XML之间的互转。
4、……当然还有其他格式的转换,我们暂时不进行举例,后面的文章会对此进行比较详细的描述。
Serialize an Object——序列化一个对象
首先定义一个实体类对象
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
}
实例化实体类,然后进行序列化为Json字符串
Account account = new Account()
{
Email = "aehyok@vip.qq.com",
Active = true,
CreatedDate = new DateTime(, , , , , , DateTimeKind.Utc),
Roles = new List<string>{"aehyok","Kris" }
};
string json = JsonConvert.SerializeObject(account, Formatting.Indented);
得到的json字符串结果为
{
"Email": "aehyok@vip.qq.com",
"Active": true,
"CreatedDate": "2014-03-27T00:00:00Z",
"Roles": [
"aehyok",
"Kris"
]
}
Deserialize an Object——反序列化一个对象
继续使用上面的实体类
现在是先定义一个Json的字符串,我们也可以将上面生成的Json字符串进行简单的修改,然后进行反序列化处理
string json = @"{
'Email': 'aehyok@vip.qq.com',
'Active': true,
'CreatedDate': '2014-03-27T00:00:00Z',
'Roles': [
'aehyok',
'Kris'
]
}";
Account account = JsonConvert.DeserializeObject<Account>(json);
通过调试得到的数据为

Convert JSON to XML——将JSON转换为XML
首先还是定义一个Json字符串,然后对其进行转换
string json = @"{
'@Id': 1,
'Email': 'aehyok@viq.qq.com',
'Active': true,
'CreatedDate': '2014-01-20T00:00:00Z',
'Roles': [
'Kris',
'aehyok'
],
'Team': {
'@Id': 2,
'Name': 'Software Developers',
'Description': 'Creators of fine software products and services.'
}
}";
XNode node = JsonConvert.DeserializeXNode(json, "Root");
转换结果为

Convert XML to JSON——将XML转换为JSON
现在就是需要先定义一个简单的XML字符串,然后对其进行转换处理
string xml = @"<?xml version='1.0' standalone='no'?>
<root>
<person id='1'>
<name>aehyok</name>
<url>http://www.google.com</url>
</person>
<person id='2'>
<name>Kris</name>
<url>http://www.baidu.com</url>
</person>
</root>"; XmlDocument doc = new XmlDocument();
doc.LoadXml(xml); string json = JsonConvert.SerializeXmlNode(doc);
通过调试得到的结果为

其他功能简介
1、Linq to JSON是用来操作JSON对象的。可以用于快速查询、修改、删除和创建JSON对象。当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部。
2、Json.Net不仅支持序列化和反序列化对象,还支持XML和JSON之间的转换。它支持的数据类型与JSON之间的转换,例如:DataSet、DataTable、Entity Framework和NHibernate、Collection、Dictionary、Dynamic等等,大部分的数据类型基本都支持。
3、JSON.NET支持BSON数据的序列化和反序列化。
BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
4、JSON Schema 用于描述JSON数据的结构和类型。如同DTD与XML的关系。
暂时我了解了这么多的功能。总之,它对于一些什么为空处理、日期格式控制、忽略属性转换等等的一些配置处理,都做的非常不错,有关详细介绍会在后续学习之后,进行总结记录介绍。
英语小贴士
1、get out of here。——滚蛋。
2、none of your business。 ——关你屁事。
3、I can't follow your step。——我跟不上你的节奏了。
4、what price of this book?==How much is this book?
作者:aehyok
出处:http://www.cnblogs.com/aehyok/
感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,那不妨点个推荐吧,谢谢支持:-O。
Json.Net6.0入门学习试水篇的更多相关文章
- Json.Net6.0
Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表 ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- T4模板试水篇1_入门
T4模板作为VS自带的一套代码生成器,功能有多强大我也不知道,最近查找了一些资料学习一下,做个笔记 更详细的资料参见: MSDN: http://msdn.microsoft.com/zh-cn/li ...
- Bootstrap3.0入门学习系列教程
可视化布局:http://www.runoob.com/try/bootstrap/layoutit/ 1.浏览器兼容性:你可以去看看大牛的一篇文章http://www.cnblogs.com/lhb ...
- 【数据售卖平台】—— Vue2.0入门学习项目爬坑
前言:这个项目是我从零学习Vue2.0时用于练习基础知识的入门项目,包含了Vue2.0几乎所有项目都会用到的基础功能,是新手用来练手的好项目,这里温故知新对功能点做一个总结.github地址:http ...
- 【Go 入门学习】第一篇关于 Go 的博客--Go 爬虫初体验
一.写在前面 其实早就该写这一篇博客了,为什么一直没有写呢?还不是因为忙不过来(实际上只是因为太懒了).不过好了,现在终于要开始写这一篇博客了.在看这篇博客之前,可能需要你对 Go 这门语言有些基本的 ...
- Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)
第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<E ...
- ElasticSearch7.10.0入门学习
ElasticSearch完成最关键的一个功能就是 大数据搜索 官网:https://www.elastic.co/cn/elasticsearch/ 简介 Elasticsearch 是一个分布式全 ...
随机推荐
- 三种方法让你的Service不被“一键加速”和系统杀掉
基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然系统仅仅是在此时先把优先级低的kill掉,假设内存还是不够,也会把你的service干掉 ...
- Visual C++学习笔记1:一定要注意ANSI和UNICODE差额
最近的研究VC++.下载VS2013,根据<Visual C++开发实战系列>首先hello我写了一个常规样品,结果显示乱码编辑框.夜已经折腾型转变.然后总结很明显ANSI和UNICODE ...
- 【HTML+CSS】(1)基本语法
HTML基金会 <em>他强调标签,<strong>加粗标签 <q>短文本引用.<blockquote>长文本引用,这两个标签会让文字带双引號. 空 ...
- Swing多线程编程(转)
关键字: Swing,多线程,GUI,SwingWorker 摘要: 本文论述了怎样开发多线程的Swing程序,从而提高Swing程序的响应速度和性能. 近期,我将推出一系列研究Swing程序 ...
- linux经常使用解压缩命令
1.tar.gz 解压 tar -zxvf source.tar.gz 压缩 tar -zcvf target.tar.gz source1 source2 2.bz2 解压 tar -jxvf so ...
- Chromium Graphics: GPUclient的原理和实现分析之间的同步机制-Part II
摘要:Part I探析GPUclient之间的同步问题,以及Chromium的GL扩展同步点机制的基本原理.本文将源码的角度剖析同步点(SyncPoint)机制的实现方式. 同步点机制的实现主要涉及到 ...
- [TWRP 2.8.4] for 小米2S/2SC 支持中英文切换
其中这个 twrp 2.8.4 在18号的下午已经编译好了. 经历了2个小时的代码修改,再经过后期的调试,中英文双语版本的twrp出炉了. 下面上几张图: 图片1:为英文界面 图片2: 图片3:中文界 ...
- PhoneGap 开发与应用 上传 App Store 在
几个简单的归纳过程,前提是你有一个开发者账户,而且必须有Mac 虚拟机或真机.尽管WIndows 也可以上载证书.但最终也必须用于上传应用程序 Xcode 要么 Application Loader ...
- IMP-00013 目前只有 DBA 其他导入能力 DBA 导出的文件
--实例演示 ---system用户导出 C:\Users\ZML>exp system/zml file='D:\zml.dmp' log = 'D:\zml.log' tables = (z ...
- 【OpenCV新手教程之十八】OpenCV仿射变换 & SURF特征点描写叙述合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨) ...