系统.Json -属性序列化跳过的自定义规则



我正在尝试从Newtonsoft迁移。Json到System.Text.Json然而,我遇到了一个问题,因为我正在使用DefaultContractResolver。我的"custom"行为具有以下属性序列化规则:

  1. 如果标记为只读属性,则跳过属性序列化
  2. 在null情况下跳过属性序列化(这是支持的)
  3. 跳过将序列化为空对象的属性序列化

例子:

class Car
{
[ReadOnly]
public string Id { get; set; }
public string Name { get; set; }
public Person Owner { get; set; }
}
class Person
{
[ReadOnly]
public string Id { get; set; }
public string Name { get; set; }
}

现在,想象一下,如果没有规则,我们有这个数据。

{
"Id":"1234",
"Name":"Skoda",
"Owner":{
"Id":"abcd",
"Name":null
}
}

现在,如果我序列化这个对象,我希望得到这个。

{
"Name":"Skoda"
}

为了忽略单个属性,您需要使用[JsonIgnore]属性以及以下条件之一:

  • Always;
  • Never;
  • WhenWritingDefault;
  • WhenWritingNull.

您还可以通过JsonSerializerOptions类型定义默认忽略条件。

如果需要额外的行为,您应该编写一个自定义转换器。

的例子:

class Person
{
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
public string Id { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Name { get; set; }
}

更多信息:

如何忽略System.Text.Json中的属性

如何在。net中为JSON序列化(封送)编写自定义转换器

最新更新