在C#中,處理JSON文件的寫(xiě)入、讀取、序列化和反序列化是一個(gè)常見(jiàn)的需求,特別是在需要與前端JavaScript應(yīng)用進(jìn)行數(shù)據(jù)交換或配置文件管理的場(chǎng)景中。下面將分別介紹如何使用.NET自帶的System.Text.Json命名空間(從.NET Core 3.0開(kāi)始引入)和廣泛使用的第三方庫(kù)Newtonsoft.Json(也稱(chēng)為Json.NET)來(lái)完成這些任務(wù)。
使用 System.Text.Json
序列化
序列化是將對(duì)象轉(zhuǎn)換為JSON字符串的過(guò)程。
using System;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "John Doe", Age = 30 };
string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString);
// 寫(xiě)入到文件
using (var writer = System.IO.File.CreateText("person.json"))
{
writer.Write(jsonString);
}
}
}
反序列化
反序列化是將JSON字符串轉(zhuǎn)換回對(duì)象的過(guò)程。
using System;
using System.Text.Json;
using System.IO;
class Program
{
static void Main(string[] args)
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
使用 Newtonsoft.Json (Json.NET)
序列化
using Newtonsoft.Json;
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "John Doe", Age = 30 };
string jsonString = JsonConvert.SerializeObject(person);
Console.WriteLine(jsonString);
// 寫(xiě)入到文件
System.IO.File.WriteAllText("person.json", jsonString);
}
}
反序列化
using Newtonsoft.Json;
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
注意事項(xiàng)
- 選擇庫(kù):System.Text.Json 是.NET Core 3.0及更高版本的一部分,對(duì)于新項(xiàng)目,如果不需要Json.NET的高級(jí)功能,推薦使用它,因?yàn)樗懈玫男阅芎透俚膬?nèi)存占用。
- 異常處理:在實(shí)際應(yīng)用中,我們可能需要添加異常處理邏輯來(lái)捕獲并處理在序列化/反序列化過(guò)程中可能發(fā)生的錯(cuò)誤,例如文件訪問(wèn)錯(cuò)誤或JSON格式錯(cuò)誤。
- 性能:在處理大量數(shù)據(jù)或需要高性能的場(chǎng)景中,應(yīng)測(cè)試并比較不同庫(kù)的性能。
- 版本兼容性:在使用第三方庫(kù)時(shí),注意庫(kù)的版本與項(xiàng)目依賴(lài)之間的兼容性。
該文章在 2024/10/19 12:13:16 編輯過(guò)