当我尝试反序列化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);
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
有人可以建议我如何解决这个问题吗?我经历了很多帖子,但没有找到合适的解决方案。
答案 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谢谢,你节省了我很多时间