C#-JSON的序列化和反序列化

目录:

1.       前言

2.       JSON简介

3.       序列化和反序列化的概念

4.       .Net Framework处理JSON

5.       JSON序列化

6.       JSON反序列化

7.       NewtonSoft.Json

8.       参考文献

前言

之前一直在.Net调用各种SDKAPI,发现它们大多是通过JSON传输数据,用的时候查了很多资料,现在写一篇总结文章吧。

 

JSON简介

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

序列化和反序列化的概念

序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

反序列化(deseriallization):将序列化的数据恢复为对象的过程。

JSON本质上就是JavaScript的对象,我们把携带数据的JSON对象打包成成字符串用于网络发送就是序列化过程,数据字符串数据生成JSON对象是一个反序列化的过程。

 

.NET Framework处理JSON

.Net库中包含了序列化和反序列化的命名空间System.Web.Script.Serialization Namespace。通过查阅官方文档(

https://docs.microsoft.com/zhcn/dotnet/api/system.web.script.serialization?view=netframework-4.7),我们可知该命名空间包含了5个类:

1.png

详情可查阅微软的官方文档。

若想在工程中使用这个库,需要将其引用进来,引用目录:

2.png

 

JSON序列化

现在我们开始介绍C#序列化和反序列化JSON。要想解析JSON,我们必须知道要解析的JSON对象的内容。以下我们通过一个示例来进行演示这个过程。

首先,我们有一个已经被序列JSON对象字符串,它被存放在txt文件里:

3.png


我们要根据这个字符串写出响应的C#对象,当然更简单的方法是我们复制字符串内容到http://www.bejson.com/convert/json2csharp/这个网站,可以自动把json字符串转换为对象。

4.png

然后我们把生成的代码复制到工程中。

有时候因为JSON格式不标准,比如变量命名中含有非法字符,我们复制到IDE里会报错,这个时候我们可以把变量名改成合法名字,然后在进行解析的时候也要把JSON字符串中的变量名和C#对象里的变量名改成一致。

比如我现在测试的JSON字符串里有非法字符:

5.png

由此生成的类:

6.png

类名非法。

这个时候我把/去掉,然后就OK

7.png

 

接下来用.NetSerializer进行序列化:

8.png

从上面的代码可知,我们把序列化后的字符串中的’_’替换为’/’,可以但没必要。


JSON反序列化

接下来我们演示如何从一个文件中读取JSON字符串并进行反序列化。

9.png

txt里的结果一致:

10.png

 

NewtonSoft.Json

另一个解析Json的库是NewtonSoft.Json,这是他们的网站:https://www.newtonsoft.com/json

使用起来和.Net的库差不多。如下图:

12.png

 

 

参考文献

[1]百度百科.JSON. https://baike.baidu.com/item/JSON/2462549?fr=aladdin

[2]百度百科.序列化.https://baike.baidu.com/item/%E5%BA%8F%E5%88%97%E5%8C%96/2890184?fr=aladdin

[3]微软开发文档.. JavaScriptSerializer Class.

https://docs.microsoft.com/zhcn/dotnet/api/system.web.script.serialization.javascriptserializer?view=netframework-4.7 .

 

 


上一篇:

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于