亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#中使用System.Text.Json高效操作JSON數(shù)據(jù)

admin
2025年8月4日 18:39 本文熱度 1454

引言

在現(xiàn)代軟件開發(fā)中,JSON(JavaScript Object Notation)已成為數(shù)據(jù)交換的事實(shí)標(biāo)準(zhǔn)格式。.NET Core 3.0及更高版本引入了System.Text.Json命名空間,提供了一套高性能、低分配的JSON處理API。本文將基于一個Windows Forms示例,詳細(xì)介紹如何使用System.Text.Json來構(gòu)建和解析JSON數(shù)據(jù)。

?

一、System.Text.Json簡介

System.Text.Json是微軟提供的一個高性能JSON處理庫,相比傳統(tǒng)的Newtonsoft.Json,它具有以下優(yōu)勢:

  1. 更高的性能

  2. 更低的內(nèi)存分配

  3. 與.NET運(yùn)行時深度集成

  4. 無需額外依賴

二、示例項(xiàng)目

開發(fā)軟件:Visual Studio 2022

目標(biāo)框架:.NET 8.0

我們的示例是一個Windows Forms應(yīng)用程序,包含兩個主要功能:

  1. 構(gòu)建JSON對象并顯示在RichTextBox中

  2. 解析JSON數(shù)據(jù)并提取信息顯示在另一個RichTextBox中

三、構(gòu)建JSON對象

創(chuàng)建基礎(chǔ)JSON對象

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

這里我們創(chuàng)建了一個JsonObject實(shí)例,并添加了兩個屬性:"Code"和"Desc"。

構(gòu)建JSON數(shù)組

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. 創(chuàng)建一個JsonArray實(shí)例

  2. 遍歷城市數(shù)組,為每個城市創(chuàng)建JSON對象

  3. 將城市對象添加到數(shù)組中

  4. 將整個數(shù)組作為屬性添加到主JSON對象

序列化選項(xiàng)

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

JsonSerializerOptions允許我們自定義序列化行為:

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

  • UnsafeRelaxedJsonEscaping - 減少不必要的字符轉(zhuǎn)義,特別適用于中文等非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); //附加根節(jié)點(diǎn)            }
            jb["City"] = cityArray;
            // 序列化為JSON字符串            var options = new JsonSerializerOptions            {                WriteIndented = true,                Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping            };
            richTextBox1.Text = jb.ToJsonString(options);        }

效果:

四、解析JSON數(shù)據(jù)

解析JSON字符串

JsonNode jb = JsonNode.Parse(jsonText);

獲取頂層屬性

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

通過索引器訪問屬性,并使用GetValue<T>方法獲取強(qiáng)類型值。

處理JSON數(shù)組

JsonArray cityArray = jb["City"].AsArray();
foreach (JsonNode cityNode in cityArray){    string str_InfoCode = cityNode["Code"].GetValue<string>();    string str_InfoName = cityNode["Name"].GetValue<string>();    // 顯示處理結(jié)果...}
  1. 使用AsArray()將節(jié)點(diǎn)轉(zhuǎn)換為JsonArray

  2. 遍歷數(shù)組中的每個元素

  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");
    // 獲取城市數(shù)組    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");    }}

效果

五、對于高性能場景,可以考慮:

  • 復(fù)用JsonSerializerOptions實(shí)例

  • 使用源生成器進(jìn)行編譯時序列化

  • 避免頻繁創(chuàng)建解析器實(shí)例

與Newtonsoft.Json對比

雖然Newtonsoft.Json功能更豐富,但在大多數(shù)場景下,System.Text.Json是更好的選擇:

  1. 更好的性能

  2. 更安全(默認(rèn)不自動類型轉(zhuǎn)換)

  3. 與.NET平臺更緊密集成

六、結(jié)論

通過這個Windows Forms示例,我們展示了如何使用System.Text.Json高效地構(gòu)建和解析JSON數(shù)據(jù)。關(guān)鍵點(diǎn)包括:

  1. 使用JsonObjectJsonArray構(gòu)建復(fù)雜JSON結(jié)構(gòu)

  2. 利用JsonSerializerOptions自定義序列化行為

  3. 通過JsonNodeAPI靈活訪問JSON數(shù)據(jù)

對于.NET開發(fā)者來說,掌握System.Text.Json是處理現(xiàn)代Web API、配置文件和各種數(shù)據(jù)交換場景的重要技能。隨著.NET的持續(xù)發(fā)展,這個庫的功能和性能還將不斷提升,值得投入時間深入學(xué)習(xí)。


該文章在 2025/8/4 18:39:21 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved