mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
500 words
1 minute
在 .NET C# 中优雅地使用 Json 序列化对象
2026-03-20

System.Text.Json命名空间提供对 JavaScript 对象表示法(JSON)进行序列化和反序列化(或者编组和解组)的功能。自 .NET Core 3.0 起,.NET 运行时即包含了 System.Text.Json 命名空间。

json 格式文件是网络即时数据传输的主流格式。为了便于网络数据传输或本地文本文件存储,有时需要在 C# 中将数据存储为 json 文本。System.Text.Json.JsonSerializer 提供了强大的 json 序列化支持。

创建与 json 数据对应的 C# 类#

JsonSerializer 内置强大的转换器可以将 C# 类转换为 json 文本,包括序列化和反序列化支持。你需要创建一个用于数据格式存储的 C# 类,供转换器使用。如下所示:

public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
public int Wind { get; set; }
}
NOTE

创建用于 json 序列化的类时,要求不包含构造函数,或必须有一个无参数构造函数。若要使用有参数的构造函数,必须使用 [JsonConstructor] 注解指定要使用的有参数构造函数,否则会引发序列化错误。

在 C# 代码中序列化数据#

JsonSerializer.Serialize 方法提供了序列化一个对象的功能。以下示例实现了序列化一个类为字符串并写入文件:

public void SerializeToJson()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string fileName = "WeatherForecast.json";
string jsonString = JsonSerializer.Serialize(weatherForecast);
File.WriteAllText(fileName, jsonString);
Console.WriteLine(File.ReadAllText(fileName));
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}

在 C# 代码中反序列化数据#

JsonSerializer.Deserialize 方法提供了从一个 json 字符串反序列化为对象的功能。以下示例实现了反序列化一个字符串为对象:

public void DeserializeFromJson()
{
string fileName = "WeatherForecast.json";
string jsonString = File.ReadAllText(fileName);
WeatherForecast weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString)!;
Console.WriteLine($"Date: {weatherForecast?.Date}");
Console.WriteLine($"TemperatureCelsius: {weatherForecast?.TemperatureCelsius}");
Console.WriteLine($"Summary: {weatherForecast?.Summary}");
}
// output:
//Date: 8/1/2019 12:00:00 AM -07:00
//TemperatureCelsius: 25
//Summary: Hot

使用异步操作#

事实上,JsonSerializer 提供了异步化方法,你可以很方便地执行异步操作。以下示例使用异步实现了 json 文件的序列化和反序列化:

public async Task SerializeToJsonAsync()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string fileName = "WeatherForecast.json";
await using FileStream createStream = File.Create(fileName);
await JsonSerializer.SerializeAsync(createStream, weatherForecast);
Console.WriteLine(File.ReadAllText(fileName));
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}
public async Task DeserializeFromJsonAsync()
{
string fileName = "WeatherForecast.json";
using FileStream openStream = File.OpenRead(fileName);
WeatherForecast? weatherForecast = await JsonSerializer.DeserializeAsync<WeatherForecast>(openStream);
Console.WriteLine($"Date: {weatherForecast?.Date}");
Console.WriteLine($"TemperatureCelsius: {weatherForecast?.TemperatureCelsius}");
Console.WriteLine($"Summary: {weatherForecast?.Summary}");
}
// output:
//Date: 8/1/2019 12:00:00 AM -07:00
//TemperatureCelsius: 25
//Summary: Hot

另请参阅#

官方教程视频:单击此处以跳转

哔哩哔哩的转载:单击此处以跳转 | System.Text.Json - 如何将.NET对象读取和写入为JSON

Share

If this article helped you, please share it with others!

在 .NET C# 中优雅地使用 Json 序列化对象
https://vista233.top/posts/json-in-csharp/
Author
forer4433
Published at
2026-03-20
License
CC BY-NC-SA 4.0

Some information may be outdated

Cover
Sample Song
Sample Artist
Cover
Sample Song
Sample Artist
0:00 / 0:00