JSON.Net - 无法将当前 JSON 对象(例如 {“name”:“value”})反序列化为类型“system.

本文关键字:JSON name value system 类型 反序列化 Net 对象 例如 | 更新日期: 2023-09-27 18:35:12

我有一个像 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 对象(例如 {"名称":"值"}) 类型为"System.Collections.Generic.List'1[ClassNameHere]",因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

如果我像这样更改代码:

var mList= JsonConvert.DeserializeObject(jsonstr);

然后它序列化,但不作为列表,作为对象。我该如何解决这个问题?

JSON.Net - 无法将当前 JSON 对象(例如 {“name”:“value”})反序列化为类型“system.

在这种情况下,您应该向反序列化程序询问IDictionary<string, Match>

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

第一个元素将具有键"40",值将是Match实例

换句话说这部分:

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

将产生键值对:

key - "40"
value - Match { Name = "Team",  ... }
"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 声明为对象数组。请注意[]