.NET的JavaScriptSerializer.Deserialize()忽略来自JSON的数字的小数周期

时间:2012-11-22 16:23:57

标签: c# .net json javascriptserializer

我正在使用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的新手。

2 个答案:

答案 0 :(得分: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"]);

答案 1 :(得分:0)

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

根本问题变得与众不同。尽管运行WCF服务的应用程序池是用于具有正确文化的标识,但是在服务器重新启动之后,立即运行此服务的过程被证明具有错误的标识或错误的文化。我们仍然没有弄清楚问题究竟在哪里,但是由于ThreadPool污染(返回到线程池的线程没有重置其文化),或者AppFabric自动启动中的错误......也许。

在任何情况下,原始帖子中的问题都归结为错误的CurrentCulture,并且可能是JavaScriptSerializer的错误实现(JSON规范是否要求小数点小数点?)。使用不兼容的CurrentCulture时,小数不会正确反序列化。