目录:
1. 前言
2. JSON简介
3. 序列化和反序列化的概念
4. .Net Framework处理JSON
5. JSON序列化
6. JSON反序列化
7. NewtonSoft.Json
8. 参考文献
前言
之前一直在.Net调用各种SDK和API,发现它们大多是通过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个类:
详情可查阅微软的官方文档。
若想在工程中使用这个库,需要将其引用进来,引用目录:
JSON序列化
现在我们开始介绍C#序列化和反序列化JSON。要想解析JSON,我们必须知道要解析的JSON对象的内容。以下我们通过一个示例来进行演示这个过程。
首先,我们有一个已经被序列JSON对象字符串,它被存放在txt文件里:
我们要根据这个字符串写出响应的C#对象,当然更简单的方法是我们复制字符串内容到http://www.bejson.com/convert/json2csharp/这个网站,可以自动把json字符串转换为对象。
然后我们把生成的代码复制到工程中。
有时候因为JSON格式不标准,比如变量命名中含有非法字符,我们复制到IDE里会报错,这个时候我们可以把变量名改成合法名字,然后在进行解析的时候也要把JSON字符串中的变量名和C#对象里的变量名改成一致。
比如我现在测试的JSON字符串里有非法字符:
由此生成的类:
类名非法。
这个时候我把/去掉,然后就OK了
接下来用.Net的Serializer进行序列化:
从上面的代码可知,我们把序列化后的字符串中的’_’替换为’/’,可以但没必要。
JSON反序列化
接下来我们演示如何从一个文件中读取JSON字符串并进行反序列化。
这txt里的结果一致:
NewtonSoft.Json
另一个解析Json的库是NewtonSoft.Json,这是他们的网站:https://www.newtonsoft.com/json。
使用起来和.Net的库差不多。如下图:
参考文献
[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.