使用F#的Newtonsoft.Json DefaultSettings问题

时间:2016-03-23 15:04:26

标签: f# json.net

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#的翻译有问题吗?或者是牛顿软件可能忽略了我的自定义转换器,因为内置转换器正在应用优先级?

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说,您希望使用赋值运算符(<-)而不是等于运算符(=)。请注意,一旦执行此操作,编译器也会自动为您应用委托转换(并且没有结果可以忽略),因此您的代码可以变为:

JsonConvert.DefaultSettings <-
    fun () -> 
        let settings = new JsonSerializerSettings()
        settings.Formatting <- Formatting.Indented
        settings.Converters.Add(new DuConverter())
        settings