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.4Dies funktionierte nahtlos (es scheint, als ob beim Deserialisieren eine Rundung angewendet wurde). Mit dem Upgrade aufJson.NET 4.5Beim 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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage