第一篇使用 System.Text.Json 序列化和反序列化Json使用了序列化的方式将对象序列化成想要的JSON字符串。不过那种方式需要声明一个Class。
如果不想声明Class,则可以利用第二篇使用 System.Text.Json 无类型方式读取JSON文件中提到的JsonNode。
如下所示:
var editJsonNode = JsonNode.Parse(str);
editJsonNode!["organization"] = "New Organization";
editJsonNode!["phone"] = "123456789";
((JsonObject)editJsonNode).Remove("address");
((JsonArray)editJsonNode!["staffs"]!).Add(new JsonObject
{
["firstName"] = "Wang",
["lastName"] = "Wu"
});
Console.WriteLine(editJsonNode.ToJsonString(new JsonSerializerOptions { WriteIndented = true }));
- 使用 JsonNode 读取 JSON 文件
- 修改或者新增属性可以使用字典的方法:["属性名"] 来赋值
- 删除属性则先把 JsonNode 转成 JsonObject , 然后调用他的 Remove 方法
- 数组则转成 JsonArray, 其中包含了常用的Remove,Add,Insert 方法
如果想创建一个新的JSON,则使用 JsonObject 类型即可, 如下:
var jsonObj = new JsonObject
{
["organization"] = "vdeveloper.net",
["address"] = new JsonObject
{
["city"] = "GuangZhou",
["province"] = "GuangDong",
["zipCode"] = "510000"
},
["staffs"] = new JsonArray
(
new JsonObject
{
["firstName"] = "Zhang",
["lastName"] = "San"
},
new JsonObject
{
["firstName"] = "Li",
["lastName"] = "Si"
}
)
};
Console.WriteLine(jsonObj.ToJsonString(new JsonSerializerOptions { WriteIndented = true }));
- 普通的值属性,直接给值就行
- 对象类属性,则赋值 JsonObject
- 数组类属性,则赋值 JsonArray
- JsonObject 除了 ToJsonString , 还有 WriteTo 方法,可以用来写入流
- JsonObject 还包含一个静态方法 Create, 可以直接从 JsonElement 创建一个对象, JsonElement 则是第二篇中提到的 JsonDocument 的一部分,此方法适合从另一个Json中复制整个节点