C# - 反序列化JSON对象

4
我正在尝试将以下json绑定到列表中,注意每个字符串可能包含多个元素,因此列表应如下所示:
红色,黑色
蓝色
橙色,蓝色,红色,黑色,粉色
[
 {
    "shoes": [
      "red",
      "black"
    ]
  },
  {
    "shoes": [
      "blue"
    ]
  },
  {
    "shoes": [
      "orange",
      "blue",
      "red",
      "black",
      "pink"
    ]
  }
]

这是我目前的进展,还不算太多:

public class Shoes
{
   [JsonProperty("colors")]
   public IList<string> Colors { get; set; }
}

在主函数中,我正在调用实际的链接(不幸的是,我不能在这里提供它)

using (WebClient wc = new WebClient())
{               
    string json = wc.DownloadString(@"JSONlink");
    Shoes shoe = JsonConvert.DeserializeObject<Shoes>(json);
}

它给了我以下错误提示:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'xxx' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

我在这个领域没有太多经验,所以任何帮助都将是非常好的。谢谢。

3个回答

4

范例JSON包含一系列对象,每个对象代表一个鞋子。在JSON中代表颜色集合的属性名为shoes,因此类应该如下所示:

public class Shoe
{
   [JsonProperty("shoes")]
   public IList<string> Colors { get; set; }
}

你还需要将其反序列化为鞋子的集合,而不是单个实例:
var shoes = JsonConvert.DeserializeObject<List<Shoe>>(json);

没问题,很高兴能帮忙! - RagtimeWilly

1

看起来您的数据模型与JSON不符。我建议您访问json2csharp页面,并将JSON粘贴到该页面以获取生成的C#类。

我已经为您完成了这项工作:

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

1

您的C#类是错误的。

请使用以下类:

public class Result
{
    public List<string> shoes { get; set; }
}

反序列化:
using (WebClient wc = new WebClient())
{               
    string json = wc.DownloadString(@"JSONlink");
    var result = JsonConvert.DeserializeObject<List<Result>>(json);
}

@john 你能解释一下怎么做吗? - Gaurang Dave
请检查Ale_lipa的答案。它是相同的类。我知道json.net。它可以工作。如果不能,请让我知道我的错误或错误。直接投票反对并不意味着你是正确的。 - Gaurang Dave
例子 - 看!它失败了!只有RagtimeWilly有正确的答案。 - ProgrammingLlama
你的代码不起作用,却没有回应证明?我为什么不会对错误的答案进行负评?这不是负评的目的吗? - ProgrammingLlama
@john,我改变了我的答案。谢谢,是的,类并没有错,是反序列化时出现了错误。如果可能,请撤销您的踩票。再次感谢 :) - Gaurang Dave
鉴于您的更正,我已经点赞了您的回答。 - ProgrammingLlama

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