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