No se puede deserializar la matriz JSON (por ejemplo, [1,2,3]) en el tipo ' ' porque el tipo requiere que el objeto JSON (por ejemplo, {"name":"value"}) se deserialice correctamente

Resuelto Avinash asked hace 10 años • 5 respuestas

Tengo este 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"
    }
]

Y tengo estas clases:

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; }
}

Estoy intentando deserializar el JSON anterior usando el siguiente código:

var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);

pero recibo este error:

No se puede deserializar la matriz JSON actual (por ejemplo, [1,2,3]) en el tipo 'test.Model.RetrieveMultipleResponse' porque el tipo requiere un objeto JSON (por ejemplo, {"name":"value"}) para deserializarse correctamente. Para corregir este error, cambie el JSON a un objeto JSON (por ejemplo, {"nombre":"valor"}) o cambie el tipo deserializado a una matriz o un tipo que implemente una interfaz de colección (por ejemplo, ICollection, IList) como Lista que puede deserializarse desde una matriz JSON. JsonArrayAttribute también se puede agregar al tipo para forzarlo a deserializarse desde una matriz JSON. Ruta '', línea 1, posición 1.

Avinash avatar Mar 21 '14 18:03 Avinash
Aceptado

Su cadena json está entre corchetes ( []), por lo que se interpreta como una matriz en lugar de un solo RetrieveMultipleResponseobjeto. Por lo tanto, debe deserializarlo para escribir colección de RetrieveMultipleResponse, por ejemplo:

var objResponse1 = 
    JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
har07 avatar Mar 21 '2014 11:03 har07

No puedo agregar un comentario a la solución, pero eso no funcionó para mí. La solución que funcionó para mí fue usar:

var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); 
return des.data.Count.ToString();

Deserializar una matriz JSON en un objeto .NET fuertemente tipado

TheNerdyNerd avatar Apr 11 '2017 16:04 TheNerdyNerd