LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#中使用System.Text.Json高效操作JSON数据

admin
2025年8月4日 18:39 本文热度 35

引言

在现代软件开发中,JSON(JavaScript Object Notation)已成为数据交换的事实标准格式。.NET Core 3.0及更高版本引入了System.Text.Json命名空间,提供了一套高性能、低分配的JSON处理API。本文将基于一个Windows Forms示例,详细介绍如何使用System.Text.Json来构建和解析JSON数据。

一、System.Text.Json简介

System.Text.Json是微软提供的一个高性能JSON处理库,相比传统的Newtonsoft.Json,它具有以下优势:

  1. 更高的性能

  2. 更低的内存分配

  3. 与.NET运行时深度集成

  4. 无需额外依赖

二、示例项目

开发软件:Visual Studio 2022

目标框架:.NET 8.0

我们的示例是一个Windows Forms应用程序,包含两个主要功能:

  1. 构建JSON对象并显示在RichTextBox中

  2. 解析JSON数据并提取信息显示在另一个RichTextBox中

三、构建JSON对象

创建基础JSON对象

var jb = new JsonObject { };jb["Code"] = "0";jb["Desc"] = "成功";

这里我们创建了一个JsonObject实例,并添加了两个属性:"Code"和"Desc"。

构建JSON数组

string[] city = { "北京""上海" };var cityArray = new JsonArray();
for (int i = 0; i < city.Length; i++){    var temp = new JsonObject();    temp["Code"] = (i + 1).ToString();    temp["Name"] = city[i];    cityArray.Add(temp);}
jb["City"] = cityArray;

这段代码展示了如何:

  1. 创建一个JsonArray实例

  2. 遍历城市数组,为每个城市创建JSON对象

  3. 将城市对象添加到数组中

  4. 将整个数组作为属性添加到主JSON对象

序列化选项

var options = new JsonSerializerOptions{    WriteIndented = true,    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping};

JsonSerializerOptions允许我们自定义序列化行为:

  • WriteIndented: true - 生成格式化的、易读的JSON

  • UnsafeRelaxedJsonEscaping - 减少不必要的字符转义,特别适用于中文等非ASCII字符

最终生成的JSON

{  "Code": "0",  "Desc""成功",  "City": [    {      "Code": "1",      "Name""北京"    },    {      "Code": "2",      "Name""上海"    }  ]}

完整代码:

        private void button1_Click(object sender, EventArgs e)        {            string[] city = { "北京""上海" };
            var jb = new JsonObject { };            jb["Code"] = "0";            jb["Desc"] = "成功";
            var cityArray = new JsonArray();            for (int i = 0; i < city.Length; i++)            {                var temp = new JsonObject();
                temp["Code"] = (i + 1).ToString();                temp["Name"] = city[i];
                cityArray.Add(temp); //附加根节点            }
            jb["City"] = cityArray;
            // 序列化为JSON字符串            var options = new JsonSerializerOptions            {                WriteIndented = true,                Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping            };
            richTextBox1.Text = jb.ToJsonString(options);        }

效果:

四、解析JSON数据

解析JSON字符串

JsonNode jb = JsonNode.Parse(jsonText);

获取顶层属性

string str_Code = jb["Code"].GetValue<string>();string str_Desc = jb["Desc"].GetValue<string>();

通过索引器访问属性,并使用GetValue<T>方法获取强类型值。

处理JSON数组

JsonArray cityArray = jb["City"].AsArray();
foreach (JsonNode cityNode in cityArray){    string str_InfoCode = cityNode["Code"].GetValue<string>();    string str_InfoName = cityNode["Name"].GetValue<string>();    // 显示处理结果...}
  1. 使用AsArray()将节点转换为JsonArray

  2. 遍历数组中的每个元素

  3. 提取每个城市对象的属性

完整代码

private void button2_Click(object sender, EventArgs e){    string jsonText = richTextBox1.Text;
    // 解析JSON    JsonNode jb = JsonNode.Parse(jsonText);
    // 获取顶层属性    string str_Code = jb["Code"].GetValue<string>();    string str_Desc = jb["Desc"].GetValue<string>();
    richTextBox2.AppendText("Code:" + str_Code);    richTextBox2.AppendText("-");    richTextBox2.AppendText("Desc:" + str_Desc);    richTextBox2.AppendText("\r\n");
    // 获取城市数组    JsonArray cityArray = jb["City"].AsArray();
    foreach (JsonNode cityNode in cityArray)    {        string str_InfoCode = cityNode["Code"].GetValue<string>();        string str_InfoName = cityNode["Name"].GetValue<string>();
        richTextBox2.AppendText("cityCode:" + str_InfoCode);        richTextBox2.AppendText("-");        richTextBox2.AppendText("cityName:" + str_InfoName);        richTextBox2.AppendText("\r\n");    }}

效果

五、对于高性能场景,可以考虑:

  • 复用JsonSerializerOptions实例

  • 使用源生成器进行编译时序列化

  • 避免频繁创建解析器实例

与Newtonsoft.Json对比

虽然Newtonsoft.Json功能更丰富,但在大多数场景下,System.Text.Json是更好的选择:

  1. 更好的性能

  2. 更安全(默认不自动类型转换)

  3. 与.NET平台更紧密集成

六、结论

通过这个Windows Forms示例,我们展示了如何使用System.Text.Json高效地构建和解析JSON数据。关键点包括:

  1. 使用JsonObjectJsonArray构建复杂JSON结构

  2. 利用JsonSerializerOptions自定义序列化行为

  3. 通过JsonNodeAPI灵活访问JSON数据

对于.NET开发者来说,掌握System.Text.Json是处理现代Web API、配置文件和各种数据交换场景的重要技能。随着.NET的持续发展,这个库的功能和性能还将不断提升,值得投入时间深入学习。


该文章在 2025/8/4 18:39:21 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved