.NET Core 3 System.Text.JSON的使用

时间:2022-06-01 18:18:46

ASP.NET Core 3.0引入了原生支持处理json的Sytem.Text.Json,替换了之前的Newtonsoft.Json。如果项目中使用的是.NET Standard或者.NET framework(v4.6.1+),如果想使用System.Text.Json,则需要安装System.Text.Jsonde NuGet包

添加Namespaces

使用System.Text.Json首先要引入它的Namespaces,C#代码如下:

using System.Text.Json;
using System.Text.Json.Serialization;

.NET对象序列化为JSON

调用JsonSerializer.Serialize方法,可以把一个.NET对象序列化为一个json字符串。

示例:

WeatherForecast weatherForecast;
//...
string json = JsonSerializer.Serialize<WeatherForecast>(weatherForecast);

也可以移除JsonSerializer.Serialize里指定泛型参数:

WeatherForecast weatherForecast;
//...
string json = JsonSerializer.Serialize(weatherForecast);

如果要序列化为UTF-8格式,则需要调用JsonSerializer.SerializeToUtf8Bytes 方法。

示例:

byte[] utf8Json = JsonSerializer.SerializeToUtf8Bytes<WeatherForecast>(weatherForecast);

反序列化JSON为.NET对象

调用 JsonSerializer.Deserialize可以反序列化JSON字符串为.NET对象。

示例:

string json = ... ;
var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(json);

要从UTF-8反序列化,调用JsonSerializer.Deserialize时,使用Utf8JsonReader或ReadOnlySpan <byte>。

示例:

byte[] utf8Json;
//...
var readOnlySpan = new ReadOnlySpan<byte>(utf8Json);
weatherForecast = JsonSerializer.Deserialize<WeatherForecastMin>(readOnlySpan);

或者:

byte[] utf8Json;
//...
var utf8Reader = new Utf8JsonReader(utf8Json);
weatherForecast = JsonSerializer.Deserialize<WeatherForecastMin>(ref utf8Reader);