为什么这个JSON返回为“无效的JSON原语”?

时间:2011-04-07 19:33:43

标签: asp.net json serialization deserialization

以下JSON未反序列化。这显然是因为DECIMALS在保存JSON中。我该如何解决这个问题?

这个初始JSON来自服务器并且是有效的:

    {
    "AppropriationAmount": 25000000, 
    "AppropriationHours": 56300, 
    "ArrThreshold": 11, 
    "ClientKey": 24, 
    "Description": 'Find and incarcerate the escaped prisoner', 
    "DirectHours": 50000, 
    "EndDate": '3/31/2011', 
    "EngineeringHours": 4000, 
    "IndirectHours": 2000, 
    "Key": 1589, 
    "Number": '0', 
    "OtherHours": 300, 
    "ProductivityCurveType": 'BurnedEarned', 
    "ProjectManager": 'Doctor Who', 
    "ProjectName": 'Prisoner ZERO', 
    "StartDate": '5/1/2010' 
    }

此后续JSON发送到服务器FAILS:
一旦用户编辑了表单,数据就会被客户端序列化并发送回来......然后在尝试反序列化JSON时失败。

    {
    "AppropriationAmount": 56300.00, 
    "AppropriationHours": 25000000.00, 
    "ArrThreshold": 11.00, 
    "ClientKey": , 
    "Description": 'Find and incarcerate the escaped prisoner', 
    "DirectHours": 50000.00, 
    "EndDate": '3/31/2011', 
    "EngineeringHours": 4000.00, 
    "IndirectHours": 2000.00, 
    "Key": 1589, 
    "Number": '0', 
    "OtherHours": 300.00, 
    "ProductivityCurveType": 'BurnedEarned', 
    "ProjectManager": 'Doctor Who', 
    "ProjectName": 'Prisoner ZERO', 
    "StartDate": '5/1/2010' 
    }

此代码抛出错误:

    try
    {
        if (!String.IsNullOrEmpty(this.JSON))
        {
            serializer = new JavaScriptSerializer();
            dialog = serializer.Deserialize<ProjectDecorator>(this.JSON);
        }
    }
    catch (Exception ex)
    {
        // The message shows here
    }

抛出的错误如下所示:

{"Invalid JSON primitive: ."}

2 个答案:

答案 0 :(得分:11)

“ClientKey”:,没有值

http://www.jsonlint.com/

答案 1 :(得分:11)

ClientKey不仅没有值,而且还因为没有将键和值放在双引号("")中而冒着JSON有效性的风险。

您的密钥没问题,但string值必须用双引号括起来。看一下JSON网站,看看哪些是允许的,哪些不是。