我正在使用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的新手。
答案 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时,小数不会正确反序列化。