Die Json-Bibliothek von Newtonsoft bietet die Möglichkeit, globale Einstellungen zum Anwenden benutzerdefinierter Konverter und anderer Einstellungen festzulegen. Ich habe einen benutzerdefinierten Konverter, der so lange funktioniert, wie ich ihn für jedes Objekt, das ich serialisiere, explizit anrufe, aber ich möchte es global einstellen, also muss ich das nicht machen. Dies kann geschehen, wie hier in C# gezeigt:Newtonsoft.Json DefaultSettings-Problem mit F #
https://stackoverflow.com/a/19121653/2506634
Und die offizielle Unterzeichnung der Defaultsettings Eigenschaft ist:
public static Func<JsonSerializerSettings> DefaultSettings { get; set; }
Ich habe versucht, dies wie so zu F # übersetzen:
JsonConvert.DefaultSettings =
System.Func<JsonSerializerSettings>
(fun() ->
let settings = new JsonSerializerSettings()
settings.Formatting <- Formatting.Indented
settings.Converters.Add(new DuConverter())
settings
)
|> ignore
Dies kompiliert und ausführt, ohne Fehler, aber der individuelle Wandler ist nicht, wenn seriali angewendet zing. Aus irgendeinem Grund gibt das Setzen der Eigenschaft auch einen booleschen Wert zurück (daher die |> ignore
) und ich habe festgestellt, dass dieser Boolesche Wert falsch ist.
Also, ist etwas falsch mit meiner Übersetzung zu F #? Oder ignoriert Newtonsoft meinen benutzerdefinierten Konverter, weil der integrierte Konverter Vorrang hat?
Sie verwenden '=', was testet für die Gleichheit (und dann ignorierst du das Ergebnis). Sie möchten stattdessen '<-' verwenden, um die Eigenschaft festzulegen. – kvb
@ kvb vielleicht sollte ich dies eine separate Frage machen. Warum ging F # mit '=' zum Vergleich anstelle von '=='? –
Wenn Sie sich mit 'ignore' beschäftigen, tun Sie fast sicher etwas falsch. –