反序列化为DataTable时,Float / String值被错误地转换为整数

时间:2013-02-08 20:57:50

标签: asp.net json json.net

我通过ajax将此跟随对象发布到asp.net web服务器:

$.ajax({
   type: "POST",
   url: "/home.aspx",
   contentType:'application/json',
   data:JSON.stringify({d1:42.00,d2:3.14,d3:'17'})
});

当JSON.Net反序列化对象

JsonConvert.DeserializeObject<DataTable>(stringfied);

d2和d3如int所示,结果是: d1 = 42,d2 = 3,d3 = 17

问题与这篇文章完全相同: http://digitalbush.com/2011/04/24/asp-net-mvc3-json-decimal-binding-woes/

我无法使用本文解决此问题,因为我正在使用网络表单。

任何出路?

更新

Actualy上面的字符串是错误的,这一个反映了问题,我刚刚在Linqpad上转载:

JsonConvert.DeserializeObject<DataTable>("[{\"Price\":3},{\"Price\":3.33}]").Dump();

数据表的结果是:3和3不是3和3.33

如果我使用DeserializeObject方法,它可以正常工作,但我需要使用Datatable,因为我在应用程序上有一个通用函数,可以将Datatable转换为MSExcel。

1 个答案:

答案 0 :(得分:1)

有了这么简单的数据,为什么不使用Generic.Dictionary

string json = "{d1:42.00, d2:3.14, d3:\"17\"}";

Web.Script.Serialization.JavaScriptSerializer serializer = new Web.Script.Serialization.JavaScriptSerializer();
System.Collections.Generic.Dictionary<string, object> jsonObject = (System.Collections.Generic.Dictionary<string, object>)serializer.DeserializeObject(json);

decimal d1 = jsonObject["d1"];
decimal d2 = jsonObject["d2"];
string d3 = jsonObject["d3"];
相关问题