我正在尝试序列化对象数组,但是我需要它忽略空元素。我意识到我可以在反序列化时仅具有检查空值的逻辑,但是我不想在网络上写入不必要的数据。该数组最多可以包含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);
}
是否有一个优雅的解决方案?
答案 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进行过滤。