serialize serializar deserialize c# arrays json serialization

c# - deserialize - No se puede deserializar la matriz JSON(por ejemplo[1,2,3]) en el tipo '''' porque el tipo requiere objeto JSON(por ejemplo,{"nombre": "valor"}) para deserializar correctamente



serialize json c# (3)

No se puede 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

Tengo a Json como a continuación:

[ { "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" } ]

para eso tengo clase como a continuación:

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 tratando de deserializar el JSON anterior usando el siguiente código:

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

pero estoy obteniendo el siguiente 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, {"nombre": "valor"}) para deserializar 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 pueda ser deserializado de una matriz JSON. JsonArrayAttribute también se puede agregar al tipo para forzarlo a deserializar desde una matriz JSON. Ruta '''', línea 1, posición 1.


Si uno quiere apoyar Genéricos (en un método de extensión) este es el patrón ...

public static List<T> Deserialize<T>(this string SerializedJSONString) { var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString); return stuff; }

Se usa así:

var rc = new MyHttpClient(URL); //This response is the JSON Array (see posts above) var response = rc.SendRequest(); var data = response.Deserialize<MyClassType>();

MyClassType se ve así (debe coincidir con los pares de valores nominales de la matriz JSON)

[JsonObject(MemberSerialization = MemberSerialization.OptIn)] public class MyClassType { [JsonProperty(PropertyName = "Id")] public string Id { get; set; } [JsonProperty(PropertyName = "Name")] public string Name { get; set; } [JsonProperty(PropertyName = "Description")] public string Description { get; set; } [JsonProperty(PropertyName = "Manager")] public string Manager { get; set; } [JsonProperty(PropertyName = "LastUpdate")] public DateTime LastUpdate { get; set; } }

Use NUGET para descargar Newtonsoft.Json agregue una referencia donde sea necesario ...

using Newtonsoft.Json;


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

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