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);