使用Json.Net反序列化一个对象数组

5
收到的数据如下所示:
每个项目中都有一个名为“customer”的对象,我已经有了一个相同的类。如何使用Json.net将它们转换?
我尝试了以下方法:
var data = JsonConvert.DeserializeObject<List<customer>>(val);

并添加另一个类:

public class customerJson
{
    public Customer customer{ get; set; }
}

尝试反序列化它:

var data = JsonConvert.DeserializeObject<List<customerJson>>(val);

使用这两个方法时,我都会收到一个异常:

无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1[customer]',因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。要解决此错误,请将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化的类型,使其成为正常的.NET类型(例如不是像整数这样的基本类型,也不是像数组或List这样的集合类型)可以从JSON对象中反序列化。还可以将JsonObjectAttribute添加到类型中,以强制从JSON对象进行反序列化。路径'行',行1,位置8。

数据:

{"rows":[{"id":"232333","name":"nam"},{"id":"3434444","name":"2ndName"}]}

请展示您收到的JSON 文本 - 那张图片真的没有帮助。您也没有说明您已经尝试过的两种方法的结果。 - Jon Skeet
2个回答

10

如果我正确地阅读了您的JSON数据结构,那么您可能想要这个:

public class Root
{
    public List<Customer> rows { get; set; }
}

var data = JsonConvert.DeserializeObject<Root>(val);

测试过的代码:

void Main()
{
    var test = JsonConvert.DeserializeObject<Root>("{\"rows\":[{\"id\":\"232333\",\"name\":\"nam\"},{\"id\":\"3434444\",\"name\":\"2ndName\"}]}");

    Console.WriteLine(test.rows[0].id); // prints 232333
}

public class Customer
{
    public int id { get; set; }
}

public class Root
{
    public List<Customer> rows { get; set; }
}

1
我以这种方式得到了一个空值。 - Akbari
@Akbari,你能否发布实际的JSON(而不仅仅是图片)? - asgerhallas
你能删除你的回答吗,这样我就可以删除这个问题了。显然,它不是应该有的内容。 - Akbari
@Akbari,问题现在好多了 :) 我刚刚用你的数据尝试了一下我的建议代码,我没有得到null。我已经更新了答案并加入了我的测试代码。 - asgerhallas

3

如果仍有人遇到问题,可以尝试以下方法:

如果 JSON 数据看起来像这样:

"result": [
        {
            "firstname": "John",
            "lastname": "Doe",

        }, 
        {
            "firstname": "Max",
            "lastname": "Mustermann",
        }
    ]

ResultList.cs

public class ResultList {

  [JsonProperty("result")]
  public List<ResultObj> ResultObj { get; set }

}

ResultObj.cs

public class ResultObj {

  [JsonProperty("firstname")]
  public string FirstName { get; set; }

  [JsonProperty("lastname")]
  public string LastName{ get; set; }

}

最后:

using Newtonsoft.Json;

var resultList = JsonConvert.DeserializeObject<ResultList>(jsonString);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接