【问题标题】:How to force json.net to deserialize DataTable column from integer to float如何强制 json.net 将 DataTable 列从整数反序列化为浮点数
【发布时间】:2013-07-04 10:25:58
【问题描述】:

我正在尝试将 json 反序列化为数据表。我的 JSON 如下所示: [{ “身份证”:35, “名称”:“ABC”, “XVar”:0.078814, “YVar”:1 }, { “身份证”:79, “名称”:“XYZ”, “XVar”:1.50, “YVar”:30.2 }]

我正在使用以下代码进行反序列化: var dataTable = (DataTable)JsonConvert.DeserializeObject(jsonString, (typeof(DataTable)));

问题是第二个对象的 Y 值被序列化为 30 而不是 30.2。我可以做的最简单的事情是保存数据。欢迎所有想法。

【问题讨论】:

    标签: c# json.net json-deserialization


    【解决方案1】:

    您面临的问题是,默认情况下,用于序列化和反序列化 DataTable 类型的 Json.Net DataTableConverter 使用 json 字符串中的第一个对象来检测每个值的类型柱子。由于第一个对象上的YVar 是整数,因此它假定所有其他对象在该列上也是整数。

    你有两个选择:

    1. 将您的值格式化为浮点数,即使它们是 int 值,在这种情况下,您的 json 字符串应该有 "YVar": 1.0 而不是 "YVar": 1
    2. 获取 json.net DataTableConverter 源并根据您的需要对其进行定制。这将要求您使用 JsonConvert.DeserializeObject(string value, Type type, params JsonConverter[] converters) 的重载

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多