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的对象就是 DataContractJsonSerializerJavaScriptSerializer这两个。但是这个是在.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(2014, 3, 27, 0, 0, 0, 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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统和大数据处理

Command模式入门

提起Command模式,我想没有什么比遥控器的例子更能说明问题了,本文将通过它来一步步实现GOF的Command模式。

11820
来自专栏逸鹏说道

c# 温故而知新: 线程篇(一) 下

Abort 方法: 其实 Abort 方法并没有像字面上的那么简单,释放并终止调用线程,其实当一个线程调用 Abort方法时,会在调用此方法的线程上引发一个异常...

27060
来自专栏圣杰的专栏

ABP入门系列(4)——创建应用服务

一、解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层。展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的业务...

32370
来自专栏程序员的SOD蜜

C#调用C和C++函数的一点区别

最近做U800电话的二次开发,需要调用厂商的C函数库来打电话,后来想加入通话录音功能,但发现程序默认生产的WAV文件过大,又找了个WAV转MP3的C++函数库程...

27460
来自专栏陈仁松博客

UWP基础教程 - XAML开篇

XAML是英文Extensible Application Markup Language的缩写,中文可以称为“可扩展应用程序标记语言”,是基于Extensiv...

44180
来自专栏Java进阶架构师

03:SpringBoot整合SpringDataJPA实现数据库的访问(二)

首先回忆一下,前面我们创建studentRepo类继承JpaRepository<T,ID>接口,即可实现最基本的crud。如下:

10320
来自专栏向治洪

android 的android httpClient详解

AndroidHttpClient结构: public final class AndroidHttpClient extends Object imple...

23850
来自专栏张善友的专栏

Ibatisnet Quick Start

准备工作 1. 下载ibatis软件包(http://ibatis.apache.org/dotnetdownloads.html)。 2. 创建测试数据库,并...

20380
来自专栏更流畅、简洁的软件开发方式

我的数据访问类(第二版)—— for .net2.0 (一)

asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。 这一个月里又重新学习了一下基础知识,比如多态、接口了什么...

21790
来自专栏技术之路

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细...

31280

扫码关注云+社区

领取腾讯云代金券