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



我正在尝试序列化一个对象数组,但我需要它忽略空元素。我意识到我可以简单地在反序列化时使用逻辑来检查空值,但是我不想通过网络写入不必要的数据。数组最多可以有 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);
}

有没有一个优雅的解决方案?

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

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

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

如果出于任何原因不喜欢这个想法,可以使用类似于序列化为 JSON 时排除集合中的特定项中的自定义JsonConverter来执行筛选。

相关内容

  • 没有找到相关文章

最新更新