我正在创建一个这样的JSON对象:
public class JsonObject
{
public string dataCLTotalCount { get; set; }
public string dataCCTotalCount { get; set; }
}
var Temporary = (from DataItem in DataSource_.Cast<object>()
select new JsonObject
{
dataCCTotalCount = string.Format("{0:n0}", ((long)GetPropertyValue(DataItem, "DataCCTotalCount"))),
dataCLTotalCount = string.Format ("{0:n0}", ((long)GetPropertyValue(DataItem, "DataCLTotalCount")))
}).ToList();
var serialized = new JavaScriptSerializer().Serialize(Temporary);
return serialized;
当我尝试使用客户端代码(JS)运行该JSON时,逗号使其无法读取,从而阻止图形显示数据。
string.Format("{0:n0}" , ...)
应该受到责备吗?
由于
答案 0 :(得分:0)
问题可能是您在没有指定cultureinfo的情况下使用string.Format
。这意味着它正在服务器上配置的任何文化,并且您的服务器正在使用小数分隔符为逗号的语言。
您可以在string.format中指定InvariantCulture
,如下所示:
String.Format(
CultureInfo.InvariantCulture,
"{0:n0}",
(long)GetPropertyValue(DataItem, "DataCCTotalCount"));
它应该解决问题。
编辑:没有从你的评论中意识到它正在添加千位的分隔符。添加InvariantCulture不会解决这个问题。您应指定另一种数字格式而不是“N”(数字)。您应该在您的情况下使用“F”作为固定点:
String.Format(
CultureInfo.InvariantCulture,
"{0:F0}",
(long)GetPropertyValue(DataItem, "DataCCTotalCount"));
答案 1 :(得分:0)
JavaScriptSerializer
的重点是为您正确序列化许多对象类型;要获得有效的JSON数字,您不需要自己的字符串转换;您甚至不需要(long)
强制转换,因为序列化程序将使用反射来确定类型。
这也意味着您可以删除中间JsonObject
类并使用匿名类型。
var Temporary = (from DataItem in DataSource_.Cast<object>()
select new
{
dataCCTotalCount = GetPropertyValue(DataItem, "DataCCTotalCount"),
dataCLTotalCount = GetPropertyValue(DataItem, "DataCLTotalCount")
}).ToList();