私は次のような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配列([1,2,3]など)が必要なため、現在のJSONオブジェクト({"name": "value"}など)をタイプ 'System.Collections.Generic.List`1 [ClassNameHere]'に逆シリアル化できません。 )正しく逆シリアル化する。
次のようにコードを変更した場合:
var mList= JsonConvert.DeserializeObject(jsonstr);
次に、シリアル化されますが、リストとしてではなく、オブジェクトとしてシリアル化されます。どうすればこれを修正できますか?
この場合、Deserializerに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
}
keyValuePairになります:
key - "40"
value - Match { Name = "Team", ... }
"50": {
"name": "Team A vs Team D",
"value": {
"home": 0,
"away": 2
}
}
Desirializerは正しく動作します。このjsonコードでは、value
はオブジェクトです。これで試してください:
"50": {
"name": "Team A vs Team D",
"value": [{
"home": 0,
"away": 2
}]
}
このjsonコードでは、value
がオブジェクトの配列として宣言されています。 [
と]
に注意してください