添加到JSON服务器服务器端的逗号使JSON在JavaScript中不可读

时间:2015-05-06 09:04:40

标签: javascript c# json parsing

我正在创建一个这样的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}" , ...)应该受到责备吗?

由于

2 个答案:

答案 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();