在現代軟件開發中,JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,被廣泛應用于前后端數據傳輸、配置文件存儲等場景。C# 作為一門強大的編程語言,提供了豐富的庫和工具來處理 JSON 數據。本文將詳細介紹如何在 C# 中讀寫 JSON 文件,涵蓋從基礎操作到高級技巧的各個方面。
JSON 是一種基于文本的數據格式,易于人閱讀和編寫,同時也易于機器解析和生成。它由鍵值對組成,支持的數據類型包括字符串、數字、布爾值、數組和對象。JSON 的簡潔性和靈活性使其成為現代應用程序中數據交換的首選格式。
在 C# 中,處理 JSON 數據的主要庫是 System.Text.Json
和 Newtonsoft.Json
(也稱為 Json.NET)。System.Text.Json
是 .NET Core 3.0 及更高版本中引入的官方庫,而 Newtonsoft.Json
是一個廣泛使用的第三方庫,功能更為豐富。
System.Text.Json
是 .NET 官方提供的 JSON 處理庫,具有高性能和低內存占用的特點。它支持序列化和反序列化操作,適用于大多數常見的 JSON 處理場景。
Newtonsoft.Json
是一個功能強大的第三方 JSON 庫,提供了比 System.Text.Json
更多的功能和靈活性。它支持更復雜的數據類型、自定義序列化和反序列化邏輯,以及更豐富的配置選項。
在 .NET Core 3.0 及更高版本中,System.Text.Json
已經包含在框架中,無需額外安裝。如果你使用的是 .NET Framework 或其他版本的 .NET,可以通過 NuGet 包管理器安裝 System.Text.Json
:
dotnet add package System.Text.Json
要讀取 JSON 文件,首先需要將文件內容讀取為字符串,然后使用 JsonSerializer.Deserialize
方法將其反序列化為 C# 對象。
using System;
using System.IO;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
要將 C# 對象寫入 JSON 文件,可以使用 JsonSerializer.Serialize
方法將對象序列化為 JSON 字符串,然后將字符串寫入文件。
using System;
using System.IO;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "John Doe", Age = 30 };
string jsonString = JsonSerializer.Serialize(person);
File.WriteAllText("person.json", jsonString);
Console.WriteLine("JSON file written successfully.");
}
}
要使用 Newtonsoft.Json
,首先需要通過 NuGet 包管理器安裝它:
dotnet add package Newtonsoft.Json
使用 Newtonsoft.Json
讀取 JSON 文件與 System.Text.Json
類似,但提供了更多的配置選項。
using System;
using System.IO;
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
使用 Newtonsoft.Json
寫入 JSON 文件也非常簡單。
using System;
using System.IO;
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "John Doe", Age = 30 };
string jsonString = JsonConvert.SerializeObject(person);
File.WriteAllText("person.json", jsonString);
Console.WriteLine("JSON file written successfully.");
}
}
在實際應用中,JSON 數據可能包含嵌套對象、數組等復雜結構。System.Text.Json
和 Newtonsoft.Json
都支持處理這些復雜結構。
using System;
using System.Collections.Generic;
using System.Text.Json;
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public List<Address> Addresses { get; set; }
}
class Program
{
static void Main()
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonSerializer.Deserialize<Person>(jsonString);
foreach (var address in person.Addresses)
{
Console.WriteLine($"Street: {address.Street}, City: {address.City}");
}
}
}
在某些情況下,可能需要自定義序列化和反序列化邏輯。Newtonsoft.Json
提供了豐富的選項來實現這一點。
using System;
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
[JsonIgnore]
public string Secret { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "John Doe", Age = 30, Secret = "Top Secret" };
string jsonString = JsonConvert.SerializeObject(person);
Console.WriteLine(jsonString); // Output: {"Name":"John Doe","Age":30}
}
}
JSON 標準中并沒有定義日期和時間的格式,因此在處理日期和時間時需要特別注意。Newtonsoft.Json
提供了 JsonConvert
類來處理日期和時間的序列化和反序列化。
using System;
using Newtonsoft.Json;
public class Event
{
public string Name { get; set; }
public DateTime Date { get; set; }
}
class Program
{
static void Main()
{
Event event = new Event { Name = "Conference", Date = DateTime.Now };
string jsonString = JsonConvert.SerializeObject(event, Formatting.Indented);
Console.WriteLine(jsonString);
Event deserializedEvent = JsonConvert.DeserializeObject<Event>(jsonString);
Console.WriteLine($"Event Name: {deserializedEvent.Name}, Date: {deserializedEvent.Date}");
}
}
在 C# 中讀寫 JSON 文件是一項常見的任務,System.Text.Json
和 Newtonsoft.Json
是兩個主要的工具庫。System.Text.Json
是 .NET 官方提供的庫,具有高性能和低內存占用的特點,適用于大多數常見的 JSON 處理場景。Newtonsoft.Json
則提供了更多的功能和靈活性,適用于更復雜的 JSON 處理需求。
通過本文的介紹,你應該已經掌握了如何在 C# 中使用這兩個庫來讀寫 JSON 文件,并了解了一些高級技巧。希望這些知識能夠幫助你在實際開發中更好地處理 JSON 數據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。