NullValueHandling 用于非 null 但其中没有数据的属性

本文关键字:数据 属性 用于 null NullValueHandling | 更新日期: 2023-09-27 18:32:44

在我的POCO对象中,我有一些子对象,其中可能有也可能没有一些数据。但是,它们是在对象初始化期间声明的,因此它们不为 null。

当我将它们转换为 JSON 对象时,即使我将 NullValueHandling 设置为忽略,它们也会显示,因为它们不是空的。

处理它们的最佳方法是什么,以便在我将 POCO 对象序列化为 JSON 时它们不会出现?

下面是 POCO 对象的示例:

public class Person
{
   [JsonProperty("id")]
   public Guid Id { get; set; }
   [JsonProperty("firstName")]
   public string FirstName { get; set; }
   [JsonProperty("lastName")]
   public string LastName { get; set; }
   [JsonProperty("addresses", NullValueHandling = NullValueHandling.Ignore)]
   public List<Address> Addresses { get; set; } = new List<Address>();
}

在此示例中,即使我没有此人的任何地址,在序列化 person 类时,我也会看到addresses: []为空数组。

我真的希望能够忽略所有没有数据的属性。处理此问题的最佳方法是什么?

NullValueHandling 用于非 null 但其中没有数据的属性

答案似乎很简单:Newtonsoft Json.NET 可以跳过序列化空列表吗?

如果允许您扩展原始类,则添加一个 ShouldSerializePropertyName 函数。这应该返回一个 指示是否应序列化该属性的布尔值 对于类的当前实例。在您的示例中,这可能看起来 像这样(未经测试,但你应该得到图片):