【问题标题】:JSON.Net - cannot deserialize the current json object (e.g. {"name":"value"}) into type 'system.collections.generic.list`1JSON.Net - 无法将当前 json 对象(例如 {"name":"value"})反序列化为类型 'system.collections.generic.list`1
【发布时间】:2015-02-23 02:32:43
【问题描述】:

我有一个类似 JSON 的

{
  "40": {
    "name": "Team A vs Team B",
    "value": {
      "home": 1,
      "away": 0
    }
  },
  "45": {
    "name": "Team A vs Team C",
    "value": {
      "home": 2,
      "away": 0
    }
  },
  "50": {
    "name": "Team A vs Team D",
    "value": {
      "home": 0,
      "away": 2
    }
  }
}

所以这是一种匹配列表。我有类将其反序列化为:

public class Match
{
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
    [JsonProperty(PropertyName = "value")]
    public Value Values { get; set; }
}

public class Value
{
    [JsonProperty(PropertyName = "home")]
    public int Home { get; set; }
    [JsonProperty(PropertyName = "away")]
    public int Away { get; set; }
}

我正在尝试像这样反序列化 json:

var mList= JsonConvert.DeserializeObject<List<Match>>(jsonstr);

但我遇到了异常:

无法反序列化当前 JSON 对象(例如 {"name":"value"}) 进入类型“System.Collections.Generic.List`1[ClassNameHere]”,因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

如果我像这样更改代码:

var mList= JsonConvert.DeserializeObject(jsonstr);

然后它序列化但不是作为一个列表,作为一个对象。我怎样才能解决这个问题?

【问题讨论】:

标签: c# json json.net json-deserialization


【解决方案1】:

在这种情况下,您应该向 Deserializer 询问 IDictionary&lt;string, Match&gt;

var mList= JsonConvert.DeserializeObject<IDictionary<string, Match>>(jsonstr);

第一个元素的键为 "40",值为 Match 实例

这部分的其他词:

"40": {
    "name": "Team A vs Team B",
    "value": {
      "home": 1,
      "away": 0
    }

将导致 KeyValuePair:

key - "40"
value - Match { Name = "Team",  ... }

【讨论】:

  • 你不应该更改文档,而是使用编程代码来管理文档。
  • @SterlingDiaz 不知道你是什么意思?我按照 JSON 结构展示了如何在 C# 中表示它......所以,我真的不确定你的意思是什么
【解决方案2】:
"50": {
         "name": "Team A vs Team D",
         "value": {
                    "home": 0,
                    "away": 2
                  }
      }

解串器工作正常。在这个 json 代码中,value 是一个对象。 试试这个:

"50": {
         "name": "Team A vs Team D",
         "value": [{
                     "home": 0,
                     "away": 2
                  }]
      }

在这个 json 代码中,value 被声明为一个对象数组。注意[]

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多