【问题标题】:Make Newtonsoft JsonConvert Default to Int32 Rather Than Int64使 Newtonsoft JsonConvert 默认为 Int32 而不是 Int64
【发布时间】:2017-05-17 03:45:24
【问题描述】:

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

JsonConvert.DeserializeObject<ExpandoObject>(jsonText)

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

我可以使用 JsonConvert 中的任何设置来更改默认行为吗?

【问题讨论】:

  • 这只是通常的 .Net System.Dynamic.ExpandoObject。我假设它可以显式转换为 IDictionary
  • 该值是否适合 Int32?我不认为 N​​ewtonsoft 会偏爱多头而不是整数。
  • 是的。值很小,适合 Int32
  • 您能提供对象的 JSON 表示吗?
  • 可以像这样简单 {"name":"John", "age":22} 。然后 22 原来是 Int64

标签: c#


【解决方案1】:

引用James Newton King(Newtonsoft.JSON 的制造商)在this 线程中的帖子:

Json.NET 默认将整数值读取为 Int64,因为无法知道该值应该是 Int32 还是 Int64,并且 Int64 不太可能溢出。对于类型化的属性,反序列化器知道将 Int64 转换为 Int32,但因为您的属性是无类型的,所以您得到的是 Int64。

以前在 SO 上已经提出过此类问题。基本上它归结为:您需要创建一个自定义转换器。如果不是针对您的对象,那么针对整数。

有关这方面的参考,请参阅this 用户drzaus 的回答,他解决了这个问题,以及this 一个enzi 的回答更详细。

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2019-11-26
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多