【发布时间】:2020-04-07 00:38:44
【问题描述】:
tl;博士;在 Newtonsoft JSON.NET 中,如何忽略某些类型(枚举)而不是其他类型(整数)的默认值?
我的团队正在使用一个为其业务实体使用协议缓冲区的库。这个库/protobuf 中的每个枚举都有一个默认值 0,即“ValueNotSet”。我的团队正在使用 Newtonsoft JSON.NET 来序列化这些实体。以下是面包店库存的稀释示例:
public enum Flavor { ValueNotSet, Cherry, Blueberry, Cheese };
public class DanishInventory { public int QtyInStock; public Flavor; }
为了节省资源,我们不想序列化ValueNotSet(现实世界的场景有很多枚举),但是零奶酪丹麦是有效的,我们确实想要序列化零.因此,我们不能在设置中使用 DefaultValueHandling = Ignore。
我创建了一个自定义 JsonConverter,但是在调用 WriteJson(...) 时,密钥已经在 JsonWriter 中。因此,如果我什么都不写,JSON 是无效的,并且我看不到一个明显的方法来回溯编写器以覆盖密钥。那么忽略某些类型(例如枚举)而不是其他类型(例如整数)的默认值的最佳方法是什么?
请注意,枚举位于 NuGet 包中,无法修改,例如通过添加属性。
【问题讨论】: