目錄
1、添加Json庫
2、數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作
3、序列化 創建和讀取Json數據?
創建Json數據? 定義一個CreateJson方法
讀取 解析 Json數據? 定義一個ReadJson方法
4、程序運行結果
在 C# 中,JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,常用于數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作。
特點類別 | 具體說明 |
---|---|
數據格式 | 由鍵值對、數組、字符串、數字、布爾值和 null 組成,結構簡潔易讀,便于解析 |
核心功能 | 序列化:將 C# 對象轉換為 JSON 字符串(便于存儲 / 傳輸) 反序列化:將 JSON 字符串轉換為 C# 對象(便于程序處理) |
主流處理庫 | System.Text.Json:.NET 內置官方庫,性能優異,支持多數基礎和中等復雜度場景 Newtonsoft.Json(Json.NET):第三方庫,功能豐富,兼容性強,適合復雜場景(如自定義轉換) |
類型映射 | 需保證 C# 類屬性與 JSON 字段在名稱、類型上匹配,支持自定義映射配置 |
結構支持 | 可處理嵌套對象、多層數組等復雜 JSON 結構,滿足多樣化數據表示需求 |
可配置性 | 支持自定義序列化選項(如日期格式、大小寫轉換、忽略空值等) |
1、添加Json庫
點擊VS中的解決方案資源管理器,右鍵項目,選中項目中的管理NuGet程序包
點擊瀏覽,搜索Json,下載下圖這個最新版本的Newtonsoft.Json
點擊應用
點擊已安裝查看,安裝成功
這個Json庫的官網手冊鏈接:Json.NEThttps://www.newtonsoft.com/json/help/html/Introduction.htm#!
2、數據序列化(對象轉 JSON)和反序列化(JSON 轉對象)操作
首先創建一個Student類
internal class Student{public string Name { get; set; }public int Id { get; set; }public bool Sex { get; set; }public string Address { get; set; }public Student(string name, int id, bool sex, string address){Name = name;Id = id;Sex = sex;Address = address;}}
創建一個Student類的對象stu1,將對象序列化為Json對象?并將對象中的數據 轉化為Json數據儲存在字符串ObjJson 中。
JsonConvert.SerializeObject
?是第三方庫?Newtonsoft.Json(Json.NET)?提供的核心方法,用于將 C# 對象序列化為 JSON 字符串。
Student stu1 = new Student("李四", 000000, true, "河南省鄭州市高新區");
//將對象 序列化為Json對象 將對象中的數據 轉化為Json數據
string ObjJson = JsonConvert.SerializeObject(stu1);
解析對象 反序列化 ?就是將Json數據 轉回為原有類型
JsonConvert.DeserializeObject
?是 Newtonsoft.Json(Json.NET)庫中用于將 JSON 字符串反序列化為 C# 對象
Student stu = JsonConvert.DeserializeObject<Student>(ObjJson);
//打印解析出的數據
Console.WriteLine(stu);
Console.WriteLine(stu.Name);
Console.WriteLine(stu.Id);
Console.WriteLine(stu.Sex);
Console.WriteLine(stu.Address);
?將對象的數據存儲在文件中
?將stu對象的數據 轉化為字符串str1存在文件Json數據1.txt中
string path1 = Directory.GetCurrentDirectory() + "\\Json數據1.txt";string str1 = stu.ToString();using (StreamWriter sw = new StreamWriter(path1, false)){sw.WriteLine(stu);}
3、序列化 創建和讀取Json數據?
主函數
//路徑默認運行文件夾 \bin\Debug\net8.0
string path = Directory.GetCurrentDirectory() + "\\Json數據.txt";
//序列化 創建Json數據
CreateJson(path);
//讀取Json數據
ReadJson(path);
創建Json數據? 定義一個CreateJson方法
public static void CreateJson(string path) {//創建一個Json對象JObject J = new JObject();// 添加數據{ "name":"張三", "id" : 123456 ,"sex":"男" ,"Color" : ["red","blue","yellow"]}//第一種向Json對象中添加數據的方式 索引器J["name"] = "張三";J["id"] = 123456;// 第二種添加數據的方式 AddJ.Add("sex", "男");//第三種 創建一個Json數組 使用Add添加JArray Ja = new JArray();Ja.Add("red");Ja.Add("blue");Ja.Add("yellow");J.Add("Color", Ja);//鍵為Color 值為Ja Json數組
其中,JArray
?是 Newtonsoft.Json(Json.NET)庫中用于處理 JSON 數組的核心類,繼承自?JContainer
,實現了?IEnumerable<JToken>
?接口。它允許開發者在不預先定義實體類的情況下,靈活地創建、解析、修改和查詢 JSON 數組,是處理動態或未知結構 JSON 數據的重要工具。將Json對象的數據 轉化為字符串寫入? Json數據.txt 文件中
//將Json對象的數據 轉化為字符串string str = J.ToString();using (StreamWriter sw = new StreamWriter(path, false)){sw.WriteLine(str);} }
讀取 解析 Json數據? 定義一個ReadJson方法
public static void ReadJson(string path) {string strjson;// 讀取Json數據的文件using (StreamReader sr = new StreamReader(path)){//ReadToEnd 一次性讀取流或文本中的所有剩余內容,并以字符串形式返回。strjson = sr.ReadToEnd();}//將Json數據格式的字符串 轉化為Json對象JObject J = JObject.Parse(strjson);
?提取數據
????????解析出來之后 使用的話就接收 ?如果只是看一下數據 直接打印即可
//引用鍵,將值轉換為字符串打印string name = J["name"].ToString();Console.WriteLine(name);Console.WriteLine(J["id"]);Console.WriteLine(J["sex"]);Console.WriteLine(J["Color"]);//正確讀取鍵Color中的值 Json數組的內容foreach (var item in J["Color"]){Console.WriteLine(item);}//創建一個數組接收鍵Color的值,鍵Color的值是一個數組,這里就相當于數組里面套數組JArray ja = new JArray(J["Color"]);//[["red","blue","yellow"]] 形成了多維數組了//這里遍歷只有一個內容 ["red","blue","yellow"]foreach (var item in ja){Console.WriteLine(item);} }
程序運行結果
寫入成功: