使用 System.Text.Json 创建或修改JSON

c#

第一篇使用 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中复制整个节点

Related Posts

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注