我创建了一个名为Skippable<'a>
的包装类型(一种F#区别联合,与Option
不同),专门用于指示在序列化类型时应排除哪些成员:
type Skippable<'a> =
| Skip
| Serialize of 'a
我有正常运行的转换器,但在反序列化期间,我希望将缺少的JSON值序列化为DU的Skip
情况(而不是当前正在发生的null
)。
我知道DefaultValueAttribute
,但这只适用于常量值,而且我不想在我的DTO中的每个Skippable
- 包裹属性上使用属性。< / p>
是否有可能以某种方式告诉Newtonsoft.Json使用该类型的某个值(Skippable<'a>
)填充某个类型(Skip
)的缺失值?使用转换器,合同解析器或其他方法?
答案 0 :(得分:1)
使Skippable
结构联合是一种方法,因为那时默认值(例如使用Unchecked.defaultOf
)似乎是任何字段的第一种情况(在本例中没有)他们的默认值。
[<Struct>]
type Skippable<'a> =
| Skip
| Serialize of 'a
// Unchecked.defaultof<Skippable<obj>> = Skip
这是FSharp.JsonSkippable库的一部分,它允许您以简单且强类型的方式控制是否在序列化时包含给定属性(并确定在反序列化时是否包含属性),此外,控制/确定可空性的排除。