相关疑难解决方法(0)

如何更改数字反序列化的默认类型?

我正在将一些属性反序列化为a Dictionary<string, object>.

当我反序列化JSON一些,它填充DictionaryInt64对象,而不是Int32.我希望它能够选择Int32作为默认值,知道我可以使用转换时会溢出的javascript数字.在这种情况下抛出异常是完全可以接受的.

有没有办法实现这一目标?我希望有一些很好的属性或一个方便的界面,可以实现并添加到JsonSerializer.而且我担心我必须深入到Json.NET的深处.

基本上我想有一些方法来控制对象的已知类型,这样我就可以Int32代替Int64DateTimes不是代替Strings.

c# json.net

19
推荐指数
1
解决办法
1万
查看次数

升级Json.NET后如何恢复int反序列化行为?

我有一些.NET代码反序列JSON化由webservice运行动态语言创建的对象.因为源是动态的,所以它有时会以float格式序列化整数值(例如2被序列化为"2.0").

随着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));
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来恢复原来的行为?理想的行为是仅反序列化具有整数值的数字,但是以任何格式(例如2.0,1e10,但不是2.5),但我会满足于4.0.4行为.

c# json.net

7
推荐指数
1
解决办法
3880
查看次数

使 Newtonsoft JsonConvert 默认为 Int32 而不是 Int64

我通过这样做将 Json 转换为 ExpandoObject

JsonConvert.DeserializeObject<ExpandoObject>(jsonText)
Run Code Online (Sandbox Code Playgroud)

我得到的整数是 Int64,但我更喜欢 Int32。

JsonConvert 中是否有任何设置可用于更改默认行为?

c#

4
推荐指数
1
解决办法
4144
查看次数

标签 统计

c# ×3

json.net ×2