c#:System.Text.Json 的使用二

本文介绍了如何在C#.NET6.0环境下使用System.Text.Json进行JSON的读写操作,包括JsonNode、JsonObject等类的使用,以及与Newtonsoft.Json的对比。示例代码展示了无实体类情况下动态解析和构造JSON的方法。
摘要由CSDN通过智能技术生成

环境:

  • .net 6.0
  • vs2022

系列篇:
《c#:System.Text.Json 的使用一》
《c#:System.Text.Json 的使用二》
《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》
《c#:System.Text.Json 的使用四(如何忽略[JsonPropertyName])》

参考:
《msdn: How to use a JSON document in System.Text.Json》
c#: Newtonsoft.Json 高级用法一(不创建类,动态解析和构造json、JObject/JArray)

类似 Newtonsoft,在没有实体类的情况下,也可以使用 JsonNode/JsonValue/JsonArray/JsonObject操作json。

它们比对关系:
在这里插入图片描述

一、读取数据

直接看代码:

using System.Text.Json.Nodes;

string jsonString =
@"
{
    ""Name"":""小明"",
    ""Age"":20,
    ""Birth"":""2003-01-01"",
    ""Ext"":{
        ""Addrs"":[""天明路"",null],
        ""Scores"":[95,98,82],
        ""Desc"":""测试""
    }
}
";
JsonNode node = JsonNode.Parse(jsonString)!;

//GetValue 和 强转都可以
var name = node["Name"].GetValue<string>();
var age = (int)node["Age"]!;
var birth = (DateTime)node["Birth"]!;
Console.WriteLine($"name={name},age={age},birth={birth}");

//下探
var desc = (string)node["Ext"]["Desc"]!;
var addr1 = node["Ext"]["Addrs"][0].GetValue<string>();
var addr2 = (string?)node["Ext"]["Addrs"][1];//这里因为本身为null,使用GetValue方法会报错
Console.WriteLine($"desc={desc},addr1={addr1},addr2={addr2}");

//数组访问
foreach (var i in node["Ext"]["Scores"].AsArray())
{
    var score = i.GetValue<float>();
    Console.WriteLine($"score={score}");
}

输出效果
在这里插入图片描述

二、写入数据

直接看代码:

using System.Text.Json.Nodes;

var ageKey = "Age";
var node = new JsonObject
{
    ["Name"] = "小明",
    [ageKey] = 20,
    ["Birth"] = "2003-01-01",
    ["Ext"] = new JsonObject
    {
        ["Addrs"] = new JsonArray("天明路", null),
        ["Desc"] = "测试",
    }
};
node["Ext"]["Desc"] = new JsonArray(95, 98);
node["Ext"]["Desc"].AsArray().Add(82);
Console.WriteLine(node.ToJsonString(new System.Text.Json.JsonSerializerOptions
{
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
    WriteIndented = true,
}));
Console.WriteLine("ok");

输出效果:
在这里插入图片描述

三、关于 JsonDocument

上面的JsonNode/JsonObject等基本够用,JsonDocument主要为性能考虑,并且限制只读,使用时记得 Dispose!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值