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 数据。以下示例使用文件流实现了 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另请参阅#
官方教程视频:单击此处以跳转
If this article helped you, please share it with others!
Some information may be outdated




