序列化
.NET6
库自带了Json
序列化相关类库,示例如下
public class Person
{
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
...
Person person = new Person {Name = "coco", Sex = "男", Age = 18};
//将对象序列化为json字符串
var json = JsonSerializer.Serialize(person);
Console.WriteLine(json);
输出结果过如下
会将汉字转换为Unicode编码。
反序列化
string json ="{\"Name\":\"coco\",\"Sex\":\"\u7537\",\"Age\":18}";
//使用泛型约束反序列化类型
var person = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine($"person.Name:{person.Name}");
Console.WriteLine($"person.Sex:{person.Sex}");
Console.WriteLine($"person.Age:{person.Age}");
输出结果如下
使用Configuration方式读取json节点
.NET
使用通常使用json
文件来存储程序的配置内容,使用序列化的方式来读取配置还需要定义配置实体类,不是很方便,因此提供了IConfiguration
接口来提供json
文件读取操作,首先安装依赖
Microsoft.Extensions.Configuration.Json
使用示例
var config = new ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile("person.json").Build();
Console.WriteLine(config["Name"]);
绑定一个json
文件作为配置源,使用数组索引访问的方式来读取配置节点,如果节点层级较深可以采用config["A:B:C"]
的形式来读取配置节点(A节点下B节点中的C节点内容)。
使用JsonNode来读取json文件
JsonNode
也是.NET6
的原生类库,使用示例如下
//读取json文件内容
var json = File.ReadAllText(AppContext.BaseDirectory + "person.json");
//解析json字符串
var node = JsonNode.Parse(json);
//读取节点
Console.WriteLine(node!["Name"]);
和Configuration读取节点配置不一样,深层节点的读取方式如下
node["A"]["B"]["C"]
因为node["A"]
返回的值还是一个node
节点
使用JsonNode来修改json文件
JsonNode
的节点属性是支持修改的,因此修改json
节点内容的思路就是先读取json
字符串并解析为JsonNode
类,修改节点内容,重新写入到文件即可