解析JSON与Newtonsoft投掷不正确的格式错误

时间:2017-04-06 14:32:47

标签: c# json

我试图通过获取响应并将其复制/粘贴到Json2CSharp中来解析我的JSON响应,然后将2个新生成的类添加到当前类的底部。 (我不喜欢处理多个班级)。我遇到的问题是当我尝试访问生成的类RootObject时出现错误

  

类型' Newtonsoft.Json.JsonSerializationException的未处理异常'发生在Newtonsoft.Json.dll

     

附加信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型' Test.RootObject'因为该类型需要一个JSON对象(例如{" name":" value"})才能正确反序列化。

即使语法是为我转换的,我也没有改变它。我需要改变什么才能使这成为有效的可行语法?

static void Main(string[] args)
{
    string userid= "186exa";
    var url = "https/?rst=" + userid;

    var connectionClient = new WebClient();
    connectionClient.Headers.Set("H", "XXXXXXXXXXXX");
    connectionClient.Headers.Set("uname", "user");
    connectionClient.Headers.Set("pswd", "pwd");
    var content = connectionClient.DownloadString(url);
}

编辑
这是课程 - 将很快发布JSON

    public class List
{
    public int id { get; set; }
    public string cmu { get; set; }
    public int lno { get; set; }
    public string clr { get; set; }
    public string name { get; set; }
    public string origin { get; set; }
    public string MajorStyle { get; set; }
    public string Style { get; set; }
    public string styleImage { get; set; }
    public int hid { get; set; }
    public string bqty { get; set; }
    public int cask { get; set; }
    public int local { get; set; }
    public string city { get; set; }
}

public class RootObject
{
    public string style { get; set; }
    public List<List> List { get; set; }
}

这是重新发送的JSON

[{"Style":"Cajun","List":[{"id":1225,"cmu":"41.2","lno":10,"name":"Bear","origin":"Lake Sinclair, MO","MajorStyle":"Burn Yo Bottom","Style":"","styleImage":"","hid":1,"bqty":"1.00","cask":0,"local":0,"city":"Amsterdam"}

2 个答案:

答案 0 :(得分:1)

您发布的代码有两个问题,

  1. 该物业&#34; clr&#34;在JSON中不存在。
  2. JSON过早结束,它应该有]}]在最后是正确的。
  3. 修复这两个问题,代码在向Newtonsoft传递时正确解析RootObject []类型,如下所示:

    var o = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject[]>(s);
    

    其中s是JSON字符串。

答案 1 :(得分:1)

首先,您需要将您的类与JSON响应匹配,因此您的类应该看起来像

public class RootObject
{
    public string Style { get; set; }

    public List[] List { get; set; }
}

public class List
{
    public int id { get; set; }
    public string cmu { get; set; }
    public int lno { get; set; }
    public string clr { get; set; }
    public string name { get; set; }
    public string origin { get; set; }
    public string MajorStyle { get; set; }
    public string Style { get; set; }
    public string styleImage { get; set; }
    public int hid { get; set; }
    public string bqty { get; set; }
    public int cask { get; set; }
    public int local { get; set; }
    public string city { get; set; }
}

之后,您需要将响应映射到对象

using Newtonsoft.Json; // Need this to work with JsonConvert

string json = @"[
    {
    'Style':'Cajun',
    'List':
        [
            {
                'id':1225,
                'cmu':'41.2',
                'lno':10,
                'name':'Bear',
                'origin':'Lake Sinclair, MO',
                'MajorStyle':'Burn Yo Bottom',
                'Style':'',
                'styleImage':'',
                'hid':1,
                'bqty':'1.00',
                'cask':0,
                'local':0,
                'city':'Amsterdam'
            }
        ]
    }
]";
RootObject[] response = JsonConvert.DeserializeObject<RootObject[]>(json);

使用关键字List可能会导致错误,因为还有一个名为List的C#类,所以要小心。