4

JavaScriptSerializer.Deserialize()用来从 JSON 文件中获取数据。
但它忽略了小数点,虽然.GetType()在值上使用,但返回System.Decimal.

这是 C# 代码:

JavaScriptSerializer jss = new JavaScriptSerializer();          
Dictionary< string, object > dic = jss.Deserialize< Dictionary< string, object >>( json );

这是 JSON:

{ "num": 3.14 }  

我试试这个:Console.WriteLine ( "{0} {1}", dic["num"].GetType(), dic["num"] );
得到这个:System.Decimal 314

PS:如您所见,我是 .NET 的新手。

4

2 回答 2

1

你一定在做一些你没有告诉我们的事情。

这是完整的工作代码:

String json = " { \"num\": 3.14 }";
JavaScriptSerializer jss = new JavaScriptSerializer();
Dictionary<string, object> dic = jss.Deserialize<Dictionary<string, object>>(json);

String test = String.Format("{0} {1}", dic["num"].GetType(), dic["num"]);
于 2012-11-22T17:19:26.163 回答
0

我在 IIS/WAS 中托管的 WCF 服务中遇到了同样的问题,我使用这个类来反序列化一些 JSON。将服务从一个生产服务器移动到另一个文化设置不同的生产服务器后,问题就出现了。

根本问题原来是不同的。尽管运行 WCF 服务的应用程序池是针对具有正确文化的标识,但在服务器重新启动后,运行该服务的进程立即被证明具有错误的标识或错误的文化。我们还没有弄清楚问题到底出在哪里,但这可能是由于 ThreadPool 污染(返回到线程池的线程不会重置其文化),或者是 AppFabric 自动启动中的错误......也许。

无论如何,原始帖子中的问题归结为错误的 CurrentCulture,并且可能是 JavaScriptSerializer 的错误实现(不是 JSON 规范要求小数点使用小数点吗?)。使用不兼容的 CurrentCulture 将无法正确反序列化小数。

于 2013-10-15T08:08:07.007 回答