Wie kann ich das Int-Deserialisierungsverhalten nach dem Upgrade von Json.NET wiederherstellen?
Ich habe welche.NET
Code, der deserialisiertJSON
Objekte erstellt von awebservice
eine dynamische Sprache ausführen. Da die Quelle dynamisch ist, serialisiert sie manchmal ganzzahlige Werte im Float-Format (z. B. 2 wird auf "2.0" serialisiert).
MitJson.NET 4.0.4
Dies funktionierte nahtlos (es scheint, als ob beim Deserialisieren eine Rundung angewendet wurde). Mit dem Upgrade aufJson.NET 4.5
Beim Deserialisieren von 2.0 wird jetzt einFormatException
. Hier ist der Code:
// works as expected in both versions
var s = "2";
Console.WriteLine(JsonConvert.DeserializeObject<int>(s));
// throws FormatException in 4.5 only
var s = "2.0";
Console.WriteLine(JsonConvert.DeserializeObject<int>(s));
// throws FormatException in 4.5, rounds to 3 in 4.0.4
var s = "2.6";
Console.WriteLine(JsonConvert.DeserializeObject<int>(s));
Gibt es eine einfache Möglichkeit, das ursprüngliche Verhalten wiederherzustellen? Das ideale Verhalten wäre, nur Zahlen mit ganzzahligen Werten zu deserialisieren, jedoch in einem beliebigen Format (z. B. 2.0, 1e10, aber nicht 2.5), aber ich würde mich mit dem 4.0.4-Verhalten zufrieden geben.