【问题标题】:Deserializing an array of objects with Json.Net使用 Json.Net 反序列化对象数组
【发布时间】:2015-07-02 06:24:04
【问题描述】:

接收到的数据是这样的:

在每个项目中,都有一个对象,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 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径“行”,第 1 行,位置 8。

数据:

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

【问题讨论】:

  • 请显示您收到的 JSON 的 文本 - 那张图片真的一点用都没有。你也没有说你已经尝试过的任何一种方法发生了什么。

标签: c# json json.net


【解决方案1】:

如果我正确阅读了你的 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; }
}

【讨论】:

  • 我这样得到一个空值。
  • @Akbari 你能发布实际的 JSON(不仅仅是图片)吗?
  • 你可以删除你的答案,所以我可以删除这个问题。显然,这不是应该的。
  • @Akbari 这个问题现在好多了:) 我刚刚用你的数据尝试了我建议的代码,但我没有得到空值。我已经用我的测试代码更新了答案。
【解决方案2】:

以防万一还有人遇到问题。这对我有用:

如果 Json 看起来像这样:

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

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

结果列表.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);

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多