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
),我注意到这个布尔值是false。
那么,我翻译成F#有什么问题吗?或者Newtonsoft可能忽略了我的自定义转换器,因为内置转换器的应用具有优先级?
正如我在注释中所说,您希望使用赋值运算符(<-
)而不是相等运算符(=
)。注意,一旦你这样做了,编译器也会自动为你应用委托转换(没有结果可以忽略),所以你的代码可以变成:
JsonConvert.DefaultSettings <-
fun () ->
let settings = new JsonSerializerSettings()
settings.Formatting <- Formatting.Indented
settings.Converters.Add(new DuConverter())
settings