c# - 解析 DataType 时 JSON 反序列化到 DataTable 问题

标签 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 设置来处理 float ...

  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

谁能建议我如何解决这个问题?我浏览了很多帖子,但没有找到可行的解决方案。

最佳答案

这里的问题是 Json.NET 的 DataTableConverter 仅从第一行中存在的值分配 DataColumn.DataType

这就是为什么您的 QtyRate 字段被正确映射的原因。

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

如果需要,您还可以创建自己的 DataTableConverter 实现。

关于c# - 解析 DataType 时 JSON 反序列化到 DataTable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363896/

相关文章:

c# - XMLDocument 与数据集?它们是一样的吗?

c# - C#中的反向广度优先遍历

c# - 是否有可能在任何任务因异常和日志而终止时捕获?

c# - WebApi的自定义异常时 "does not support http method"

asp.net-mvc - 续订 Azure ACS 颁发的 JWT

c# - 从 c# 中的 xml 字符串读取属性的最佳方法是什么

c# - 从 Azure 函数调用 Asp.Net Web API 端点

调用 ASP.NET Web API 时出现 AJAX 504

Azure可扩展架构设计

c# - 从具有 IList 返回类型的方法返回 ReadOnlyCollection