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# 类,供转换器使用。如下所示:
1public class WeatherForecast2{3 public DateTimeOffset Date { get; set; }4 public int TemperatureCelsius { get; set; }5 public string? Summary { get; set; }6 public int Wind { get; set; }7}NOTE创建用于 json 序列化的类时,要求不包含构造函数,或必须有一个无参数构造函数。若要使用有参数的构造函数,必须使用
[JsonConstructor]注解指定要使用的有参数构造函数,否则会引发序列化错误。
在 C# 代码中序列化数据#
JsonSerializer.Serialize 方法提供了序列化一个对象的功能。以下示例实现了序列化一个类为字符串并写入文件:
1public void SerializeToJson()2{3 var weatherForecast = new WeatherForecast4 {5 Date = DateTime.Parse("2019-08-01"),6 TemperatureCelsius = 25,7 Summary = "Hot"8 };9
10 string fileName = "WeatherForecast.json";11 string jsonString = JsonSerializer.Serialize(weatherForecast);12 File.WriteAllText(fileName, jsonString);13
14 Console.WriteLine(File.ReadAllText(fileName));15}16// output:17//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}在 C# 代码中反序列化数据#
JsonSerializer.Deserialize 方法提供了从一个 json 字符串反序列化为对象的功能。以下示例实现了反序列化一个字符串为对象:
1public void DeserializeFromJson()2{3 string fileName = "WeatherForecast.json";4 string jsonString = File.ReadAllText(fileName);5 WeatherForecast weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString)!;6
7 Console.WriteLine($"Date: {weatherForecast?.Date}");8 Console.WriteLine($"TemperatureCelsius: {weatherForecast?.TemperatureCelsius}");9 Console.WriteLine($"Summary: {weatherForecast?.Summary}");10}11// output:12//Date: 8/1/2019 12:00:00 AM -07:0013//TemperatureCelsius: 2514//Summary: Hot使用异步操作#
事实上,JsonSerializer 提供了异步化方法,你可以很方便地执行异步操作。以下示例使用异步实现了 json 文件的序列化和反序列化:
1public async Task SerializeToJsonAsync()2{3 var weatherForecast = new WeatherForecast4 {5 Date = DateTime.Parse("2019-08-01"),6 TemperatureCelsius = 25,7 Summary = "Hot"8 };9
10 string fileName = "WeatherForecast.json";11 await using FileStream createStream = File.Create(fileName);12 await JsonSerializer.SerializeAsync(createStream, weatherForecast);13
14 Console.WriteLine(File.ReadAllText(fileName));15}16// output:17//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}1public async Task DeserializeFromJsonAsync()2{3 string fileName = "WeatherForecast.json";4 using FileStream openStream = File.OpenRead(fileName);5 WeatherForecast? weatherForecast = await JsonSerializer.DeserializeAsync<WeatherForecast>(openStream);6
7 Console.WriteLine($"Date: {weatherForecast?.Date}");8 Console.WriteLine($"TemperatureCelsius: {weatherForecast?.TemperatureCelsius}");9 Console.WriteLine($"Summary: {weatherForecast?.Summary}");10}11// output:12//Date: 8/1/2019 12:00:00 AM -07:0013//TemperatureCelsius: 2514//Summary: Hot另请参阅#
官方教程视频:单击此处以跳转
If this article helped you, please share it with others!
Some information may be outdated




