Newtonsoft.Json DefaultSettings issue with F#



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       

相关内容

  • 没有找到相关文章

最新更新