本文主要介绍.NET Core 3.0中,使用JsonSerializer(System.Text.Json)时,序列化时排除忽略类对象属性的方法及示例代码。默认情况下,将序列化所有公共属性。 如果你不想让某些用户出现在 JSON 输出中,则可以使用几个选项。

1、排除单个属性

若要忽略各个属性,请使用[JsonIgnore]属性。

下面是要序列化的示例类型和 JSON 输出:

class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
[JsonIgnore]
public int WindSpeed { get; set; }
}

输出JSON格式:

{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureC": 25,
"Summary": "Hot"
}

2、排除所有只读属性

若要排除所有只读属性,请将IgnoreReadOnlyProperties设置为 true,如以下示例中所示:

var options = new JsonSerializerOptions
{
IgnoreReadOnlyProperties = true
};
json = JsonSerializer.Serialize(weatherForecast, options);

下面是要序列化的示例类型和 JSON 输出:

class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
public int WindSpeed { get; private set; }
}

输出JSON格式:

{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureC": 25,
"Summary": "Hot",
}

注意:此选项仅适用于序列化。 在反序列化期间,默认情况下将忽略只读属性。 如果属性包含公共 getter 而不是公共 setter,则该属性为只读。

3、排除所有 null 值属性

若要排除所有 null 值属性,请将 IgnoreNullValues 属性设置为 true,如以下示例中所示:

var options = new JsonSerializerOptions
{
IgnoreNullValues = true
};
json = JsonSerializer.Serialize(weatherForecast, options);

下面是一个示例对象,用于序列化和 JSON 输出:

weatherForecast.Date= DateTimeOffset.Now.AddHours(1);
weatherForecast.TemperatureC=25;
weatherForecast.Summar=null;

输出JSON格式:

{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureC": 25
}

注意:此设置适用于序列化和反序列化。 在反序列化过程中,仅当 JSON 中的 null 值有效时才会将其忽略。 不可以为 null 的值类型的 Null 值将导致异常。 有关详细信息,请参阅 GitHub 上的 dotnet/corefx 存储库中不可以为 null 的值类型的问题。

相关文档.NET Core 3.0使用JsonSerializer(System.Text.Json)序列化和反序列化JSON

官方文档https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-how-to