C#JsonConvert错误

时间:2013-03-12 14:45:02

标签: c# json json.net

我有这个Json Return:

[
{
  "url": "http://xxx.xxx.xxx", 
  "code": 0, 
  "aplication": 
  {
    "version":
    [
    {
       "silent": true, 
       "checksum": "9aabad09b09459ac6c9e54f9ca4eb5c4",
       "size": 1250619, 
       "force": true, 
       "apply_message": "", 
       "id": 116,
       "id_aplication": 4, 
       "number": "1.0.5.0", 
       "news": "", 
       "automatic": true, 
       "installation": "Setup.exe"
    }
    ], 
    "division_name": "DNT",
    "app_name": "MyApplication", 
    "id": 4, 
    "id_master": 0
}, 
"message": "New Application Found"
}
]

使用此网站http://json2csharp.com/,我会生成以下类:

public class Version
{
    public bool silent { get; set; }
    public string checksum { get; set; }
    public int size { get; set; }
    public bool force { get; set; }
    public string apply_message { get; set; }
    public int id { get; set; }
    public int id_aplication { get; set; }
    public string number { get; set; }
    public string news { get; set; }
    public bool automatic { get; set; }
    public string installation { get; set; }
}


public class Aplication
{
    public List<Version> version { get; set; }
    public string division_name { get; set; }
    public string app_name { get; set; }
    public int id { get; set; }
    public int id_master { get; set; }
}

public class RootObject
{
    public string url { get; set; }
    public int code { get; set; }
    public Aplication aplication { get; set; }
    public string message { get; set; }
}

然后,在我的C#代码中,我写了这个:

RootObject test = JsonConvert.DeserializeObject<RootObject>(jsonResult);

但是,我收到此错误:

  

无法反序列化当前的JSON对象(例如{“name”:“value”})   进入类型'System.Collections.Generic.List`1 [ConsoleAPP.Aplication]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。要修复此错误,请将JSON更改为JSON数组   (例如[1,2,3])或更改反序列化类型以使其正常   .NET类型(例如,不是整数的基本类型,不是集合   类似于数组或List的类型,可以从JSON反序列化   宾语。 JsonObjectAttribute也可以添加到类型中以强制它   从JSON对象反序列化。 Path'aplication.version',第1行,   位置227。

我读了一些关于此的提示,但对我没有帮助。例如:

Unable to parse JSON array in WCF REST

1 个答案:

答案 0 :(得分:4)

你的JSON是一个数组 - 它只包含一个项目,但它仍然是一个数组。如果从大JSON字符串中删除前导和尾随[],则应该反序列化。

或者您可以反序列化为RootObject[]而不是RootObject

无论哪种方式都可行。