次のようなJSONがあります:
[
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 1",
"Values": [
"Acc 1"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "1",
"Values": [
"1"
]
}
}
],
"Name": "account",
"Id": "1"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 2",
"Values": [
"Acc 2"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "2",
"Values": [
"2"
]
}
}
],
"Name": "account",
"Id": "2"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 3",
"Values": [
"Acc 3"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "3",
"Values": [
"3"
]
}
}
],
"Name": "account",
"Id": "2"
}
]
以下のクラスがあります:
public class RetrieveMultipleResponse
{
public List<Attribute> Attributes { get; set; }
public string Name { get; set; }
public string Id { get; set; }
}
public class Value
{
[JsonProperty("Value")]
public string value { get; set; }
public List<string> Values { get; set; }
}
public class Attribute
{
public string Key { get; set; }
public Value Value { get; set; }
}
以下のコードを使用して上記の JSON を逆シリアル化しようとしています。
var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);
しかし、次のエラーが発生します:
現在の JSON 配列 (例: [1,2,3]) をタイプ 'test.Model.RetrieveMultipleResponse' に逆シリアル化できません。このタイプを正しく逆シリアル化するには、JSON オブジェクト (例: {"name":"value"}) が必要です。このエラーを修正するには、JSON を JSON オブジェクト (例: {"name":"value"}) に変更するか、逆シリアル化されたタイプを配列またはコレクション インターフェイス (例: ICollection、IList) を実装するタイプ (JSON 配列から逆シリアル化できる List など) に変更します。JsonArrayAttribute をタイプに追加して、JSON 配列から強制的に逆シリアル化することもできます。パス ''、行 1、位置 1。
ベストアンサー1
JSON 文字列は角括弧 ( ) で囲まれている[]
ため、単一のオブジェクトではなく配列として解釈されます。したがって、次のようにRetrieveMultipleResponse
のコレクション型に逆シリアル化する必要があります。RetrieveMultipleResponse
var objResponse1 =
JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);