C#—Json序列化和反序列化

C#—Json序列化和反序列化

在C#中,可以使用System.Web.Script.Serialization.JavaScriptSerializer類來序列化和反序列化JSON數據。

可以使用Newtonsoft.Json庫進行JSON的序列化。

可以使用.NET內置的System.Text.Json庫來進行JSON的序列化。

json文件格式

[ { Name:"za",Age:10} { Name:"zs",Age:11} ]

一、使用JavaScriptSerializer類來序列化和反序列化

實例操作
using System;
using System.Web.Script.Serialization;public class Program
{public static void Main(){// 創建一個示例對象var person = new Person{Name = "張三",Age = 30};// 序列化對象到JSON字符串JavaScriptSerializer serializer = new JavaScriptSerializer();string json = serializer.Serialize(person);Console.WriteLine(json);// 反序列化JSON字符串到對象string jsonString = "{\"Name\":\"李四\",\"Age\":25}";Person deserializedPerson = serializer.Deserialize<Person>(jsonString);Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");}
}public class Person
{public string Name { get; set; }public int Age { get; set; }
}

二、使用Newtonsoft.Json庫進行JSON的序列化。

本方法采用的是第三方類庫實現json序列化,Newtonsoft.Json(JSON.ENT)包;(本第三方支持弱類型轉換)

Newtonsoft.Json 相比于 System.Text.Json,具有以下優勢和特點

(1)使用廣泛 多年來已經存在并廣泛使用,Newtonsoft.Json 是一個成熟的第三方庫,在 .NET 社區中被廣泛接受和使用。它擁有豐富的功能和強大的靈活性,已經在許多項目中得到驗證。

(2)功能豐富 更豐富的功能,Newtonsoft.Json 提供了一些更高級的功能,如完全自定義的序列化和反序列化邏輯,包括對循環引用的處理、自定義轉換器、忽略屬性等等。它可以方便地處理一些復雜的 JSON 數據場景。

(3)支持若類型轉換的特點

實例操作

首先,需要安裝Newtonsoft.Json包,可以通過NuGet進行安裝。

using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}Person person = new Person
{Name = "John Doe",Age = 30
};// 序列化
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);// 反序列化
string data = "{\"Name\":\"李四\",\"Age\":25}";
person=JsonConvert.DeserializeObject<Person>(data);

三、使用.NET內置的System.Text.Json庫來進行JSON的序列化

System.Text.Json 相比于 Newtonsoft.Json,具有以下優勢和特點

(1)性能 System.Text.Json 在性能方面進行了優化,通常比 Newtonsoft.Json 更快。它利用了新的讀寫 API,采用更高效的內部實現,以提供更好的性能和內存利用率。

(2)屬于 .NET Core System.Text.Json 是 .NET Core 的一部分,因此在創建跨平臺應用程序時,不需要額外的依賴項。這使得在 .NET Core 平臺上使用它更加方便。

(3)簡單場景 System.Text.Json 提供了一些簡化的 API,使得在處理簡單的 JSON 數據時更容易操作。 例如,可以直接通過 JsonSerializer.Deserialize() 方法進行快速的反序列化,而無需像在 Newtonsoft.Json 中那樣使用 JsonConvert.DeserializeObject()。

(4)默認是強類型轉換,比如:實體類定義的是字符串,json字符串返回的是整型,轉換時會報錯

實例操作

首先,需要安裝System.Text.Json包,可以通過NuGet進行安裝。

using System;
using System.Text.Json;namespace SerializeJsonExample
{class Program{static void Main(string[] args){// 創建一個示例對象var person = new Person{Name = "張三",Age = 30,};// 使用JsonSerializer.Serialize方法將對象序列化為JSON字符串string jsonString = JsonSerializer.Serialize(person);Console.WriteLine(jsonString);// 輸出:{"Name":"張三","Age":30}// 使用JsonSerializer.Deserialize方法將Json字符串反序列化為對象string data = "{\"Name\":\"李四\",\"Age\":25}";Person p = JsonSerializer.Deserialize<Person>(data)}}// 定義一個簡單的Person類,用于序列化示例public class Person{public string Name { get; set; }public int Age { get; set; }}
}

System.Text.Json包可以在模型類中進行指定數據

// json在序列化的時候可以把Code序列化成服務器中相對應的code,
public class One
{[JsonPropertyName("code")]public string Code { get; set; }[JsonPropertyName("message")]public string Message { get; set; }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42938.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42938.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搜索引擎優化培訓機構怎么選?這篇文章告訴你答案

搜索引擎優化&#xff08;SEO&#xff09;已成為網絡生存必備技能。然而面對眾多培訓機構&#xff0c;如何選擇優秀者&#xff1f;本文將為您揭曉此事&#xff0c;助您找到騰飛之地。 一、培訓機構的多樣性&#xff1a;琳瑯滿目的選擇 當前SEO培訓市場繁蕪復雜&#xff0c;既…

C++ 八股(1)

C語言中strcpy為什么不安全&#xff1f;如何解決&#xff1f; 主要原因是缺乏對輸入長度的邊界檢查&#xff0c;容易導致緩沖區溢出漏洞。 解決&#xff1a;可以使用strncpy函數替代&#xff0c;或者在程序最頂端加入代碼段 #define _CRT_SECURE_NO_WARNINGS 緩沖區溢出 …

javascript高級部分筆記

javascript高級部分 Function方法 與 函數式編程 call 語法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義&#xff1a;調用一個對象的一個方法&#xff0c;以另一個對象替換當前對象。 說明&#xff1a;call 方法可以用來代替另一個對象調用一個方法。cal…

MySQL運維實戰之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

作者&#xff1a;俊達 如果后端MySQL使用了Group Replication&#xff0c;可通過配置mysql_group_replication_hostgroups表來實現高可用 1 mysql_group_replication_hostgroups 字段描述writer_hostgroup寫hostgroup。read_only和super_read_only OFF的節點。backup_writer…

Vue3 pdf.js將二進制文件流轉成pdf預覽

好久沒寫東西&#xff0c;19年之前寫過一篇Vue2將pdf二進制文件流轉換成pdf文件&#xff0c;如果Vue2換成Vue3了&#xff0c;順帶來一篇文章&#xff0c;pdf.js這個東西用來解決內網pdf預覽&#xff0c;是個不錯的選擇。 首先去pdfjs官網&#xff0c;下載需要的文件 然后將下載…

第4章 IT服務規劃設計

第4章 IT服務規劃設計 4.1 概述 規劃設計處于整個IT服務生命周期中的前端&#xff0c;可以幫助IT服務供方了解客戶的需求&#xff0c;并對其進行全面的需求分析&#xff0c;然后通過對服務要素&#xff08;包括人員、資源、技術和過程&#xff09;、服務模式和服務方案的具體…

OpenHarmony4.x 系統模擬器環境

先下載源碼和編譯程序&#xff1a; 首先查看 OpenHarmony4.1源碼下載、編譯&#xff0c;生成OHOS_Image可執行文件的最簡易流程 準備在QEMU模擬器中運行ARM Cortex-M4的輕型開源鴻蒙系統 官方支持的開發板和模擬器種類-編譯形態整體說明OpenAtom OpenHarmony 已支持的示例工…

ArduPilot開源代碼之AP_MSP

ArduPilot開源代碼之AP_MSP 1. 源由2. Library設計2.1 啟動代碼2.2 支持特性2.3 MSP DisplayPort v.s. DJI FPV OSD 3. 重要例程3.1 AP_MSP::init3.2 AP_MSP::loop3.3 AP_MSP::init_backend 4. 實例理解5. 總結6. 參考資料 1. 源由 AP_MSP是處理MSP協議格式的報文數據應用類。…

反向業務判斷邏輯

業務功能需求&#xff1a; 根據id扣減用戶余額 包括&#xff1a;判斷用戶狀態是否正常判斷用戶余額是否充足 正向邏輯&#xff1a; 判斷用戶為正常下&#xff0c;判斷用戶余額充足&#xff0c;進行余額扣減&#xff1b; 》正向邏輯&#xff0c;多重嵌套&#xff0c;代碼不美觀…

??一文帶你入門【NestJS】

??引言 在現代Web開發領域&#xff0c;框架和技術的迭代速度令人咋舌。其中&#xff0c;NestJS作為一款基于Node.js的后端框架&#xff0c;以其卓越的設計理念和強大的功能集&#xff0c;迅速吸引了眾多開發者的眼球。本文將帶你深入了解NestJS的起源、發展&#xff0c;以及…

SpringIOC原理

SpringIOC原理 1.概念 Spring通過一個配置文件描述Bean及Bean之間的依賴關系&#xff0c;利用Java語言的反射功能實例化Bean并建立Bean之間的依賴關系。Spring的IOC容器在完成這些底層工作的基礎上&#xff0c;還提供了Bean實例緩存、生命周期管理、Bean實例代理、事件發布、…

AI提示詞:AI輔導「數學作業」

輔導孩子作業對許多家長來說可能是一件頭疼的事&#xff0c;但這部分工作可以在一定程度上交給AI來完成。 打開ChatGPT4,輸入以下內容&#xff1a; # Role 數學輔導專家## Profile - author: 姜小塵 - version: 02 - LLM: Kimi - language: 中文 - description: 專門為小學生…

加密算法詳解:對稱加密、非對稱加密、Hash算法

對稱加密、非對稱加密和哈希算法是信息安全中的三種主要加密技術&#xff0c;它們各自有不同的特點和用途&#xff1a; 對稱加密&#xff08;Symmetric Encryption&#xff09; 工作原理&#xff1a;使用相同的密鑰進行加密和解密。速度&#xff1a;通常非常快&#xff0c;適…

Elasticsearch:Node.js ECS 日志記錄 - Morgan

這是之前系列文章&#xff1a; Elasticsearch&#xff1a;Node.js ECS 日志記錄 - Pino Elasticsearch&#xff1a;Node.js ECS 日志記錄 - Winston 中的第三篇文章。在今天的文章中&#xff0c;我將描述如何使用 Morgan 包針對 Node.js 應用進行日子記錄。此 Morgan Node.j…

包裝器 std::function

使用前&#xff0c;包頭文件&#xff1a;#include <functional> std::function 是 C標準庫 中的一個通用函數包裝器&#xff1b; 它可以儲存、復制、調用任何可調用的對象&#xff0c;包括&#xff1a;函數指針、成員函數、綁定的成員函數、lambda表達式、仿函數等。 1…

Selenium Grid- 讓自動化分布式執行變得可能

什么是 Selenium Grid&#xff1f; Selenium Grid 是 Selenium 的三大組件之一&#xff0c;允許用戶同時在不同的機器和系統上測試不同瀏覽器。 也就是說 Selenium Grid 支持分布式的測試執行。它可以讓你的測試用例在一個分布式的執行環境中運行。 由上圖可見&#xff0c;測試…

linux:基礎知識及命令[圖表]

lsof:查找文件 普通文件、目錄、進程&#xff08;/proc&#xff09;、輸入輸出設備&#xff08;/dev&#xff09;、網絡字節流socket、鏈接文件、管道文件 基本用法 lsof&#xff1a;列出所有打開的文件。lsof /path/to/file&#xff1a;列出打開指定文件的所有進程。lsof -…

大話光學原理:4.散射:瑞利、拉曼、米氏和布里淵

這是一縷柔和的光&#xff0c;在空氣的舞臺上輕盈地跳躍。它悠然自得&#xff0c;在寧靜的空間中緩緩前行。然而&#xff0c;一片細薄透明的介質擋住了它的腳步&#xff0c;它毫無預兆地撞上了這片障礙。在這短暫的接觸中&#xff0c;它被分解成無數微小的粒子&#xff0c;被迫…

增強現實(AR)與虛擬現實(VR)的區別?

隨著科技的飛速發展&#xff0c;增強現實&#xff08;AR&#xff09;與虛擬現實&#xff08;VR&#xff09;技術在各個領域展現出巨大的潛力和應用前景。這兩種技術雖然在體驗和實現方式上有所不同&#xff0c;但都為用戶提供了全新的感知體驗。本文將詳細解析AR和VR的概念、區…

機器視覺/自然語言/生成式人工智能綜合應用實驗平臺-實訓平臺-教學平臺

AIGC是人工智能1.0時代進入2.0時代的重要標志&#xff0c;MIT 科技評論也將Al合成數據列為2022年十大突破性技術之一&#xff0c;甚至將生成性Al(Generative Al) 稱為是AI領域過去十年最具前景的進展。同時&#xff0c;AIGC領域崗位需求數量暴漲。高校方面在人工智能專業與機器…