我通过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。
答案 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"];