1、不区分大小写的属性匹配
默认情况下,反序列化将查找 JSON 与目标对象属性之间区分大小写的属性名称匹配。 若要更改此行为,请将PropertyNameCaseInsensitive
设置为 true:
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
};
var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(weatherForecast, options);
下面是采用 camel 大小写属性名称的示例 JSON。 它可以反序列化为具有 Pascal 大小写属性名称的以下类型。
{
"date": "2019-08-01T00:00:00-07:00",
"temperatureC": 25,
"summary": "Hot",
}
对应的类:
class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
}
2、对象中包含派生类属性
在编译时指定要序列化的类型时,不支持多态序列化。 例如,假设您有一个WeatherForecast
类和一个派生类 WeatherForecastWithWind
:
class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
}
class WeatherForecastWithWind : WeatherForecast
{
public int WindSpeed { get; set; }
}
要序列化派生类型的属性,可以使用以下两种方法:
1) 调用 Serialize 的重载,以便在运行时指定类型
json = JsonSerializer.Serialize(weatherForecast, weatherForecast.GetType());
2) 将要序列化的对象声明为 object
json = JsonSerializer.Serialize<object>(weatherForecast);
两种方法都会 JSON 输出中包含 WindSpeed 属性:
{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureC": 25,
"Summary": "Hot",
"WindSpeed": 35
}
相关文档:
.NET Core 3.0使用JsonSerializer(System.Text.Json)序列化和反序列化JSON
.NET Core 3.0 JsonSerializer排除类对象属性设置方法及示例代码
官方文档:
https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-how-to