在 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 { get; set; }
publicint Age { get; set; }
}
現在,我們可以建立一個
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 字串反序列化為物件。這種能力