如何使用Newtonsoft JSON序列化程序忽略空数组元素

时间:2018-12-25 03:49:47

标签: c# json.net

我正在尝试序列化对象数组,但是我需要它忽略空元素。我意识到我可以在反序列化时仅具有检查空值的逻辑,但是我不想在网络上写入不必要的数据。该数组最多可以包含9个元素,但是并非在所有实例中都使用所有9个索引。我知道可以使用列表,但是出于效率考虑,我不希望这样做。

对于我在该网站上浏览过的类似问题,我尝试将以下标签添加到数组中:[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

但是,这种方法不会忽略空元素。

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public Node[] Nodes { get; } 
public void Init() 
{
    Nodes = new Node[9];
}
public string Encode()
{
    return JsonConvert.SerializeObject(Nodes, Formatting.None);
}

是否有一个优雅的解决方案?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是在序列化之前过滤数组。您可以在Encode方法中执行此操作,而无需实例化新数组:

public string Encode()
{
    return JsonConvert.SerializeObject(Nodes.Where(n => n != null), Formatting.None);
}

提琴:https://dotnetfiddle.net/dj8lnP

如果您不喜欢该主意,无论出于何种原因,都可以使用类似于JsonConverter中的自定义Excluding specific items in a collection when serializing to JSON进行过滤。