【发布时间】:2016-03-23 15:04:26
【问题描述】:
Newtonsoft 的 Json 库能够设置全局设置以应用自定义转换器和其他设置。我有一个自定义转换器,只要我为我序列化的每个对象显式调用它,它就可以工作,但我想全局设置它,所以我不必这样做。这可以按照 C# 中所示的方式完成:
https://stackoverflow.com/a/19121653/2506634
DefaultSettings 属性的官方签名是:
public static Func<JsonSerializerSettings> DefaultSettings { get; set; }
我试着把它翻译成 F#:
JsonConvert.DefaultSettings =
System.Func<JsonSerializerSettings>
(fun () ->
let settings = new JsonSerializerSettings()
settings.Formatting <- Formatting.Indented
settings.Converters.Add(new DuConverter())
settings
)
|> ignore
这编译并执行没有错误,但序列化时未应用自定义转换器。另外,由于某种原因,设置属性返回一个布尔值(因此是 |> ignore ),我注意到这个布尔值是错误的。
那么,我对 F# 的翻译有问题吗?还是 Newtonsoft 可能会因为优先应用内置转换器而忽略我的自定义转换器?
【问题讨论】:
-
您正在使用
=,它测试是否相等(然后您将ignoreing 结果)。您想改用<-来设置属性。 -
@kvb 也许我应该把它作为一个单独的问题。为什么 F# 与
=进行比较而不是==? -
如果你发现自己在使用
ignore,那么你几乎肯定做错了什么。 -
@GuyCoder - 如果有疑问,答案通常是 O'Caml 兼容性。从逻辑上讲,我认为这个特定的选择也更有意义——为什么 = 符号应该与突变相关联?但它确实使从 C 风格语言的过渡更加困难。
-
哈!谢谢。多么愚蠢的错误。 @kvb 如果你想回答我会接受的。