當前位置: 妍妍網 > 碼農

C# 使用 Newtonsoft.Json 進行 JSON 數據儲存與轉換

2024-03-24碼農

在 C# 編程中,JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱讀和編寫,同時也易於機器解析和生成。Newtonsoft.Json 是一個流行的 JSON 框架,它提供了將物件序列化為 JSON 字串和從 JSON 字串反序列化為物件的功能。本文將介紹如何在 C# 中使用 Newtonsoft.Json 庫來進行 JSON 數據的儲存和轉換。

一、安裝 Newtonsoft.Json

首先,你需要將 Newtonsoft.Json 庫添加到你的 C# 計畫中。你可以透過 NuGet 包管理器來安裝它。在 Visual Studio 中,右鍵點選你的計畫 -> 選擇「管理 NuGet 程式包」 -> 搜尋「Newtonsoft.Json」 -> 點選「安裝」。

二、建立物件並序列化為 JSON 字串

假設我們有一個簡單的 Student 類,它包含 Name Age 兩個內容:

public classStudent
{
publicstring Name { getset; }
publicint Age { getset; }
}

現在,我們可以建立一個 Student 物件,並使用 Newtonsoft.Json 將其序列化為 JSON 字串:

using Newtonsoft.Json;
// 建立 Student 物件
Student student = new Student { Name = "張三", Age = 20 };
// 序列化物件為 JSON 字串
string jsonString = JsonConvert.SerializeObject(student);
// 輸出 JSON 字串
Console.WriteLine(jsonString); // 輸出: {"Name":"張三","Age":20}

JsonConvert.SerializeObject 方法接受一個物件作為參數,並返回一個表示該物件的 JSON 格式的字串。

三、從 JSON 字串反序列化為物件

如果你有一個 JSON 字串,並且你想將其轉換回一個 Student 物件,你可以使用 JsonConvert.DeserializeObject 方法:

// 假設我們有一個 JSON 字串
string jsonString = "{\"Name\":\"李四\",\"Age\":22}";
// 從 JSON 字串反序列化為 Student 物件
Student deserializedStudent = JsonConvert.DeserializeObject<Student>(jsonString);
// 輸出反序列化後的物件內容
Console.WriteLine($"Name: {deserializedStudent.Name}, Age: {deserializedStudent.Age}"); // 輸出: Name: 李四, Age: 22

JsonConvert.DeserializeObject<T> 方法接受一個 JSON 字串和一個泛型參數 T ,它指定要反序列化的目標型別。該方法返回一個反序列化後的物件。

四、處理復雜物件和集合

Newtonsoft.Json 也能處理更復雜的物件和集合。例如,如果你有一個包含多個 Student 物件的列表,你可以像這樣序列化和反序列化它:

// 建立一個包含多個 Student 物件的列表
List<Student> students = new List<Student>
{
new Student { Name = "王五", Age = 21 },
new Student { Name = "趙六", Age = 23 }
};
// 序列化列表為 JSON 字串
string jsonStudents = JsonConvert.SerializeObject(students);
Console.WriteLine(jsonStudents); // 輸出: [{"Name":"王五","Age":21},{"Name":"趙六","Age":23}]
// 從 JSON 字串反序列化為 Student 列表
List<Student> deserializedStudents = JsonConvert.DeserializeObject<List<Student>>(jsonStudents);
// 輸出反序列化後的列表內容
foreach (var student in deserializedStudents)
{
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}

五、自訂序列化和反序列化行為

有時,你可能需要自訂序列化和反序列化的行為。例如,你可能希望忽略某些內容,或者在反序列化時套用特定的邏輯。Newtonsoft.Json 提供了豐富的特性(如 [JsonIgnore] )和事件(如 JsonConverter )來支持這些高級功能。

六、註意事項和最佳實踐

  • 確保 JSON 字串的格式正確,以避免反序列化時出現錯誤。

  • 對於大型物件或復雜的數據結構,序列化和反序列化可能會消耗較多的資源。在效能敏感的場景中,請考慮緩存結果或最佳化數據結構。

  • 在處理來自不可信來源的 JSON 數據時,請確保進行適當的驗證和清理,以防止潛在的安全問題,如隱碼攻擊。

  • Newtonsoft.Json 是一個功能強大的庫,但也要註意其版本更新和相容性。確保你的計畫使用的版本與你的 .NET 版本和其他依賴項相容。

  • 七、總結

    透過使用 Newtonsoft.Json 庫,C# 開發者可以輕松地將物件序列化為 JSON 字串,以及從 JSON 字串反序列化為物件。這種能力