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#的翻译有问题吗?或者是牛顿软件可能忽略了我的自定义转换器,因为内置转换器正在应用优先级?
答案 0 :(得分:3)
正如我在评论中所说,您希望使用赋值运算符(<-
)而不是等于运算符(=
)。请注意,一旦执行此操作,编译器也会自动为您应用委托转换(并且没有结果可以忽略),因此您的代码可以变为:
JsonConvert.DefaultSettings <-
fun () ->
let settings = new JsonSerializerSettings()
settings.Formatting <- Formatting.Indented
settings.Converters.Add(new DuConverter())
settings