NullValueHandling 用于不为 null 但其中没有数据的属性
NullValueHandling for properties that are not null but have no data in them
在我的 POCO 对象中,我有一些子对象,它们可能包含也可能不包含一些数据。但是,它们是在对象初始化期间声明的,因此它们不是空的。
当我将它们转换为 JSON 对象时,即使我将 NullValueHandling 设置为 Ignore,它们也会显示,因为它们不为空。
处理它们的最佳方法是什么,以便在我将 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>();
}
在这个例子中,即使我没有这个人的任何地址,当序列化这个人 class 时,我看到 addresses: []
是一个空数组。
我真的很希望能够忽略所有没有数据的属性。处理此问题的最佳方法是什么?
好吧,答案似乎很简单:
Can Newtonsoft Json.NET skip serializing empty lists?
If you are permitted to extend the original class then add a
ShouldSerializePropertyName function to it. This should return a
Boolean indicating whether or not that property should be serialized
for the current instance of the class. In your example this might look
like this (not tested but you should get the picture):
在我的 POCO 对象中,我有一些子对象,它们可能包含也可能不包含一些数据。但是,它们是在对象初始化期间声明的,因此它们不是空的。
当我将它们转换为 JSON 对象时,即使我将 NullValueHandling 设置为 Ignore,它们也会显示,因为它们不为空。
处理它们的最佳方法是什么,以便在我将 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>();
}
在这个例子中,即使我没有这个人的任何地址,当序列化这个人 class 时,我看到 addresses: []
是一个空数组。
我真的很希望能够忽略所有没有数据的属性。处理此问题的最佳方法是什么?
好吧,答案似乎很简单: Can Newtonsoft Json.NET skip serializing empty lists?
If you are permitted to extend the original class then add a ShouldSerializePropertyName function to it. This should return a Boolean indicating whether or not that property should be serialized for the current instance of the class. In your example this might look like this (not tested but you should get the picture):