Como posso restaurar o comportamento de desserialização int depois de atualizar o Json.NET?
eu tenho alguns.NET
código que desserializaJSON
objetos criados por umwebservice
executando uma linguagem dinâmica. Como a fonte é dinâmica, às vezes serializa os valores integrais no formato flutuante (por exemplo, 2 é serializado para "2.0").
ComJson.NET 4.0.4
, isso funcionou perfeitamente (parece que o arredondamento foi aplicado ao desserializar). Com a atualização paraJson.NET 4.5
, no entanto, desserializing 2.0 agora lança umFormatException
. Aqui está o código:
// 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));
Existe alguma maneira fácil de restaurar o comportamento original? O comportamento ideal seria desserializar somente números com valores integrais, mas em qualquer formato (por exemplo, 2.0, 1e10, mas não 2.5), mas eu me conformaria com o comportamento 4.0.4.