【C# 序列化】 JSON-在.net croe中的应用
什么是 JSON?
- JSON 指的是 JavaScript 对象标记法(JavaScript Object Notation)
- JSON 是一种轻量级的数据交换格式
- JSON 具有自我描述性且易于理解
- JSON 独立于语言
JSON 使用 JavaScript 语法,但是 JSON 格式是纯文本的。
文本可被任何编程语言作为数据来读取和使用。
JSON 格式最初由 Douglas Crockford 提出。
为什么使用 JSON?
因为 JSON 格式仅仅是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。
JavaScript 提供內建函数把以 JSON 格式写的字符串转换为原生 JavaScript 对象:
JSON.parse()
因此,如果您以 JSON 格式从服务器接收数据,那么您可以像任何其他 JavaScript 对象那样使用它。
JSON的基本数据类型:
- 数值:十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用
e
或者E
表示指数部分。不能包含非数,如NaN。不区分整数与浮点数。JavaScript用双精度浮点数表示所有数值。 - 字串:以双引号
""
括起来的零个或多个Unicode码位。支持反斜杠开始的转义字符序列。 - 布尔值:表示为
true
或者false
。 - 数组:有序的零个或者多个值。每个值可以为任意类型。序列表使用方括号
[
,]
括起来。元素之间用逗号,
分割。形如:[value, value]
- 对象:若干无序的“键-值对”(key-value pairs),其中键只能是字符串。建议但不强制要求对象中的键是独一无二的。对象以花括号
{
开始,并以}
结束。键-值对之间使用逗号分隔。键与值之间用冒号:
分割。.net coreSystem.Text.Json
仅接受双引号中的属性名称和字符串值,因为 RFC 8259 规范要求使用该格式,这是唯一视为有效 JSON 的格式。 - 空值:值写为
null
{ "firstName": "John", "lastName": "Smith", "sex": "male", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
如何在 .NET 中使用 XML 和 JSON?
使用 JSON
JSON 是一种数据格式,已成为 XML 的流行替代品。它简单而整洁,语法类似于 JavaScript 对象。实际上,术语 JSON 代表 JavaScript Object Notation。.NET 的最新版本为处理 JSON 数据提供了内置支持。
System.Text.Json 命名空间提供高性能、低分配的功能来处理 JSON 数据。这些功能包括将对象序列化为 JSON 并将 JSON 反序列化为对象。它还提供用于创建内存中文档对象模型 (DOM) 的类型,用于访问 JSON 文档中的任何元素,提供数据的结构化视图。
使用 XML
XML 是一种非常流行的数据格式,用于存储和传输数据。.NET 提供了许多 API 来处理 C# 编程语言中的 XML。Linq to XML 是通用 XML 处理的主要机制。它提供了一个轻量级的、对 linq 友好的 XML 文档对象模型以及一组查询运算符。System.XML.Linq 命名空间包含与 Linq to XML 相关的类型。
考虑以下 XML 数据。它有一个根元素,employee,有两个属性 id 和 status,值分别为 '231' 和 'active'。该元素具有三个子元素:firstname、lastname 和salary。
<?xml version="1.0" encoding="utf-8"?> <employee id="231" status="active"> <firstname>David</firstname> <lastname>Block</lastname> <salary>45000</salary> </employee>
Linq to XML API 解析 XML 数据并将每个元素、属性、值和内容表示为具有存储相关数据的属性的对象。它形成了一个完全代表文档的对象树,这棵树被称为 DOM,它代表文档对象模型。
XElement 和 XDocument 提供静态 Load 和 Parse 方法来从 XML 数据源构建文档对象模型。Load 从文件、流、URL、TextReader 和 XmlReader 构建 DOM;而 Parse 从字符串构建 DOM。
应用领域
WEB开发
JSON最开始被广泛的应用于WEB应用的开发。不过目前JSON使用在JavaScript、Java、Node.js应用的情况比较多,PHP、C#等开发的WEB应用主要还是使用XML。
NoSQL数据库
相对于传统的关系型数据库,一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDB、CouchDB、RavenDB等。
与其他格式的比较
XML
JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。这使得XML在程序判读上需要比较多的功夫。主要的原因在于XML的设计理念与JSON不同。XML利用标记语言的特性提供了绝佳的延展性(如XPath),在数据存储,扩展及高级检索方面具备对JSON的优势,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。
MessagePack
MessagePack宣称比JSON更短小,快速。
格式化工具
JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,会让人陷入繁琐复杂的数据节点查找中。开发者可以通过在线JSON格式化工具,来更方便的对JSON数据进行节点查找和解析。