【问题标题】:Cannot deserialize the JSON array (e.g. [1,2,3]) into type ' ' because type requires JSON object (e.g. {“name”:“value”})无法将 JSON 数组(例如 [1,2,3])反序列化为类型“”,因为类型需要 JSON 对象(例如 {“name”:“value”})
【发布时间】:2017-07-21 14:20:02
【问题描述】:

我返回的 JSON 格式如下:

{
"Items": [
    {
        "unique_id": "11111111111",
        "rages": {
            "rage_content": "Hello rage 2",
            "date_stamp": "21/07/2017",
            "id": 2
        }
    },
    {
        "unique_id": "2222222222",
        "rages": {
            "rage_content": "Hello rage 1",
            "date_stamp": "21/07/2017",
            "id": 1
        }
    }
],
"Count": 2,
"ScannedCount": 2
}

我定义了以下 2 个类:

Items.cs:

namespace ragevent_A0._0._1
{
    class Items
    {
        public String rage_id { get; set; }
        public rage rage { get; set; }

    }
}

rage.cs:

class rage
{
    public String rage_content { get; set; }
    public String date_stamp { get; set; }
    public int id { get; set; }
}

我正在使用以下代码来尝试对上面返回的 JSON 进行反序列化:

List<Items> data = JsonConvert.DeserializeObject<List<Items>>(json);

但是,由于上述错误,我无法成功反序列化数据。我在网上尝试了一些解决方案,但是我没有设法找到适用于我返回的 JSON 格式的解决方案。我使用了 JSON 格式化程序,并且它的格式正确,所以这不应该是问题。

任何帮助将不胜感激!

【问题讨论】:

  • 尝试json2csharp.com构建类结构
  • 你的 c# 类有 rage_id 而你的 JSON 对象有 "unique_id"。那没问题吗?此外,您不是反序列化对象数组,而是反序列化包含该数组的对象
  • @danielspaniol 不,这不会引发任何异常
  • @Sir Rufo json2csharp 帮我解决了,谢谢!

标签: c# json xamarin


【解决方案1】:

对于下面发布的 JSON 数据应该是您需要的模型(信用:http://json2csharp.com/)。属性名称 rage_id 不匹配。你可以使用JsonProperty属性

public class Rages
{
    public string rage_content { get; set; }
    public string date_stamp { get; set; }
    public int id { get; set; }
}

public class Item
{
    [JsonProperty(Name="rage_id")]
    public string unique_id { get; set; }
    public Rages rages { get; set; }
}

public class RootObject
{
    public List<Item> Items { get; set; }
    public int Count { get; set; }
    public int ScannedCount { get; set; }
}

你的反序列化应该是

var data = JsonConvert.DeserializeObject<RootObject>(json); 

【讨论】:

  • 啊,太棒了,干杯。我已将此添加到我的应用程序中,但是在尝试反序列化时仍然出现错误。抱歉,unique_id - 这是一个错字。我正在使用它来反序列化: List data = JsonConvert.DeserializeObject>(json);
  • @CallumHolden json 文档描述了一个 single 对象而不是数组。数组以 [ 开头,对象以 { 开头 - 你看到了吗?
  • @CallumHolden,您没有根对象数组。请参阅答案中的编辑。
  • @CallumHolden 我有一种奇怪的感觉,你没有完全理解重点。无论如何,你应该有一个可行的解决方案;o)
  • @SirRufo,正要写同样的...所以+1 :)
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多