【发布时间】:2018-12-25 03:49:47
【问题描述】:
我正在尝试序列化一个对象数组,但我需要它来忽略空元素。我意识到我可以简单地在反序列化时使用逻辑来检查空值,但是我不想通过网络写入不必要的数据。该数组最多可以有 9 个元素,但并非在每个实例中都使用所有 9 个索引。我知道可以使用列表,但为了效率,我不希望这样做。
根据我在此站点上浏览过的类似问题,我尝试将以下标记添加到数组中:[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
但是,这种方法不会忽略 null 元素。
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public Node[] Nodes { get; }
public void Init()
{
Nodes = new Node[9];
}
public string Encode()
{
return JsonConvert.SerializeObject(Nodes, Formatting.None);
}
有没有一个优雅的解决方案?
【问题讨论】:
-
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]将在其 value 为 null 时忽略属性。在您的情况下,Nodes属性的值是Node[9]数组。Nodes = Nodes.Where(n => n != null).ToArray();在Encode()方法中是否符合您的需求? -
当数据在接收端反序列化时,如果没有索引数据,你期望如何重构数据?即Node[4]{Node,null,null,Node} Node[4] {Node,Node,null,null}
-
@vasily.sib 这绝对是一个解决方案,但是我希望序列化程序有一种方法可以跳过空条目。如果没有必要,我宁愿不实例化一个新数组。
-
@EmrahSüngü Node 对象有一个 Index 属性来处理这个问题。
-
@JackMyStack,那么你不需要使用
new Node[9];使用List或适合你的东西,例如HashSet,如果你的所有节点都应该是唯一的