【C# Json】Json 数据交换格式


JSON数据交换格式

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。人类很容易读写。机器很容易解析和生成。它基于 JavaScript 编程语言标准 ECMA-262 第 3 版的子集 - 1999 年 12 月。JSON是一种完全独立于语言的文本格式,但使用C系列语言程序员熟悉的约定,包括C,C++,C#,Java,JavaScript,Perl,Python等。这些属性使 JSON 成为理想的数据交换语言。

JSON 建立在两个结构之上:

  • 名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,哈希表,键控列表或关联数组。
  • 值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。

这些是通用的数据结构。几乎所有现代编程语言都以这种或那种形式支持它们。与编程语言可互换的数据格式也基于这些结构是有道理的。

在JSON中,它们采用以下形式:

对象是一组无序的名称/值对。对象以 {左大括号开头,以 }右大括号结尾。每个名称后跟 colon,名称/值对由 逗号分隔

  •  数组是值的有序集合。数组以 [左括号开头,以 ] 右括号结尾。值以 逗号分隔

可以是双引号中的字符串数字truefalse 或 null对象数组。这些结构可以嵌套。

C#中主要 API 如下:

 

System.Text.Json.Nodes(.Net 6.0+) System.Json (.Net core 2.0+)
Newtonsoft.Json(.Net core 3.0+)
JsonNode 字典结构
  JToken
JsonObject(继承JsonNode) 字典结构
JsonObject(继承JsonValue) JObject
JsonArray(继承JsonNode)list结构 JsonArray(继承JsonValue) JArray
JsonValue JsonValue JValue

以上内容来源: https://www.json.org/

JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。

终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。

道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的truefalse
  • string:就是JavaScript的string 一个 utf8 编码的字符串值
  • null:就是JavaScript的null
  • array:就是JavaScript的Array表示方式——[]
  • object:就是JavaScript的{ ... }表示方式。

Json value对应C#System.Text.Json 文档 中的类型:JsonValueKind枚举

Array 2

A JSON array.

False 6

The JSON value false.

Null 7

The JSON value null.

Number 4

A JSON number.

Object 1

A JSON object.

String 3

A JSON string.

True 5

The JSON value true.

Undefined 0

There is no value (as distinct from Null).

Json value对应C#System.Json 节点 中的类型:JsonType枚举

Array 3  
Boolean 4  
Number 1  
Object 2  
String 0

以及上面的任意组合。

并且,JSON还定死了字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""

由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。

把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

   .net 6.0以后才出现的类型

 System.Json :.NET Platform Extensions 6 适用.NET Platform Extensions2.1, 2.2, 3.0, 3.1, 5, 6, 7 Preview 1

https://www.newtonsoft.com/json

C