実行中の動的言語によって作成されたオブジェクト.NET
を逆シリアル化するコードがいくつかあります。ソースは動的であるため、整数値を float 形式でシリアル化することがあります (たとえば、2 は "2.0" にシリアル化されます)。JSON
webservice
ではJson.NET 4.0.4
、これはシームレスに機能しました(デシリアライズ時に丸めが適用されたようです)。ただし、へのアップグレードにより、Json.NET 4.5
2.0 を逆シリアル化するとFormatException
. コードは次のとおりです。
// 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));
元の動作を復元する簡単な方法はありますか? 理想的な動作は、整数値を持つ数値のみを逆シリアル化することですが、任意の形式 (たとえば、2.0、1e10、2.5 ではありません) ですが、私は 4.0.4 の動作に落ち着きます。