【发布时间】:2018-03-26 13:59:34
【问题描述】:
我创建了一个名为 Skippable<'a> 的包装器类型(一个 F# 可区分联合,与 Option 不同),专门用于指示在序列化类型时应排除哪些成员:
type Skippable<'a> =
| Skip
| Serialize of 'a
我有正常工作的转换器,但在反序列化期间,我希望将丢失的 JSON 值序列化为 DU 的 Skip 情况(而不是当前发生的 null)。
我知道 DefaultValueAttribute,但这仅适用于常量值,此外我不想在我的 DTO 中的每个 Skippable-wrapped 属性上使用属性。
是否有可能以某种方式告诉 Newtonsoft.Json 用该类型的某个值 (Skip) 填充该类型 (Skippable<'a>) 的缺失值?使用转换器、合约解析器或其他方法?
【问题讨论】:
-
为
Skippable<_>写一个自定义转换器? -
同意,转换器在这种情况下工作得很好。你可以从 haf 的 OptionConverter 中获取灵感:github.com/haf/Newtonsoft.Json.FSharp/blob/master/src/JsonNet/…
-
转换器在这里似乎没有帮助,因为输入 JSON 中完全缺少的属性似乎没有被调用。不过,我找到了一个潜在的解决方法(添加了答案)。