2

我正在通过 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/

我无法使用本文来解决此问题,因为我使用的是 Web 表单。

有什么出路吗?

更新

实际上上面的字符串是错误的,这个反映了问题,我只是在Linqpad上转载:

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

数据表的结果是:3 and 3 not 3 and 3.33

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

4

1 回答 1

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"];
于 2013-02-08T23:34:30.007 回答