如何强制json.net将DataTable列从整数反序列化为float

时间:2013-07-04 10:25:59

标签: c# json.net json-deserialization

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您有两个选择:

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