解析数据类型时出现 JSon 反序列化到数据表问题



当我尝试反序列化JSon时,列的值将从浮点数转换为整数。

以下是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 序列化程序设置来处理浮点数...

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

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

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

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

当它们是使用 javascript 的数值时,我将格式化值作为浮点数。

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

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

最新更新