解析DataType时,JSon反序列化为DataTable问题

时间:2018-05-16 06:34:31

标签: c# asp.net-web-api

当我尝试反序列化JSon时,列的值将从float转换为int。

以下是Json: -

{{
  "ImportData": [
{ 
  "ProdName": "Pipes",
  "Qty": 11.3,
  "Rate": 610.3,
  "Discount": 20,
},
{ 
  "ProdName": "Drill Machine",
  "Qty": 12,
  "Rate": 400.3,
  "Discount": 10.3,
},
{
  "ProdName": "Cement",
  "Qty": 50,
  "Rate": 1110.5,
  "Discount": 15.5,
}
],
"TypeId": 1,
"SourceId": 1,
"CreatedBy": 35
}}

我声明了Json Serializer设置以处理浮动...

  JsonSerializerSettings settings = new JsonSerializerSettings
  {
    FloatParseHandling = FloatParseHandling.Decimal
  };

并在反序列化时提供设置...

 dt = JsonConvert.DeserializeObject<DataTable>(objParam["ImportData"].ToString(),settings);

dt输出: -

ProdName        Qty   Rate     Discount
------------------------------------------------
Pipes           11.3  610.3    20
Drill Machine   12    400.3    10
cement          50    1110.5   15

预期输出: -

ProdName        Qty     Rate    Discount
------------------------------------------------
Pipes           11.3    610.3   20
Drill Machine   12      400.3   10.3
cement          50      1110.5  15.5

有人可以建议我如何解决这个问题吗?我经历了很多帖子,但没有找到合适的解决方案。

2 个答案:

答案 0 :(得分:0)

这里的问题是Json.NET的Q_INVOKABLE /** * @brief aFunction */ void aFunction(); 仅从第一行中的值中分配DataTableConverter

这就是正确映射数量费率字段的原因。

我建议使用与您的JSON匹配的严格类型的对象,然后将其反序列化为它。

如果需要,您也可以为DataColumn.DataType创建自己的实现。

答案 1 :(得分:0)

我使用javascript将格式化值设置为浮点数。

if (obj.DataType == 'numeric') {
  row[obj.SourceFieldName]=row[obj.SourceFieldName].toFixed(2);
}

@vikscool谢谢,你节省了我很多时间