6
我有一些.NET
代碼反序列化JSON
由運行動態語言的webservice
創建的對象。因爲源是動態的,所以它有時以浮點格式序列化整數值(例如,2被序列化爲「2.0」)。如何在升級Json.NET後恢復int反序列化行爲?
與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行爲。
可能需要考慮增加'的objectType == typeof運算(對象)'CanConvert'中,如果目標類「沒有指定」實際類型,例如'class MyObject {public object Id; }' – drzaus
@drzaus也許,但要小心。如果你這樣做,並且你有任何其他'object'類型的屬性都是* not *數字,那麼這個轉換器將會嘗試處理它們,這可能不是你所期待的。你必須添加代碼來處理這種情況。 –
對啊,我正在考慮一些[其他答案](http://stackoverflow.com/a/28748973/1037948),它通過檢查JTokenType來處理它,如果它不是預期的類型,而不是拋出' FormatException'只返回'serializer.Deserialize(reader)',它似乎將它委託給其他任何應該適當處理它的東西。它在我的測試中工作到目前爲止,嵌套的複雜類型。 – drzaus