.net 中的 json 处理
今天一个非开发口的同事在问.net里的Json是怎么处理的。简单做了个说明:
Json 在 .net 里就是字符串,但有三方类库(如:Newtonsoft.Json也称Json.net)用于处理JSON。
【更新】在 .net core 中对 json 有原生支持,参见命名控件 System.Text.Json(System.Text.Json.dll)
一般是两种方式来用:
1、固定结构:json与对象实例互转。序列化/反序列化,主要是用于对象的传输和存储。
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
}
string jsonText = "[{\"age\":\"18\",\"name\":\"王梅梅\",\"sex\":\"女\"},{\"age\":\"20\",\"name\":\"李雷\",\"sex\":\"男\"}]";
Newtonsoft.Json.JsonConvert.DeserializeObject<Person>(jsonText)
[
{
"age": "18",
"name": "王梅梅",
"sex": "女"
},
{
"age": "20",
"name": "李雷",
"sex": "男"
}
]
2、非固定结构:通过JToken实现对 json的构造、解析、查找(JPAth)、节点的增/删/改。
JToken的层次结构是这样的:
JToken -抽象基类
JContainer - 能够包含其它JToken的JToken抽象基类
JArray - 表示一个JSON数组(包含一个有序的List<JToken>)
JObeject - 表示一个JSON对象(包含一个IEnumerable<JProperty>)
JProperty - 表示一个JSON属性(在JObject中是一个name/JToken键值对)
JValue - 表示一个原生JSON值(string,number,boolean,null)
简单理解,JToken对应json中的一个节点/某一层的节点。
参考:
https://www.cnblogs.com/Lau7/p/8036872.html
https://stackoverflow.com/questions/38558844/jcontainer-jobject-jtoken-and-linq-confusion