当我尝试反序列化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谢谢,你节省了我很多时间