JSON配列(例:[1,2,3])をタイプ ' ' に逆シリアル化できません。タイプを正しく逆シリアル化するにはJSONオブジェクト(例:{"name":"value"})が必要です。質問する

JSON配列(例:[1,2,3])をタイプ ' ' に逆シリアル化できません。タイプを正しく逆シリアル化するにはJSONオブジェクト(例:{

次のような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);

おすすめ記事