2012-01-27 8 views
18

Tengo problemas para deserializar una matriz en .NET MVC3, cualquier ayuda sería apreciada.JavaScriptSerializer.Deserialize array

He aquí el fragmento de código:

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) { 
    JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
    string jsonData = reader.ReadToEnd(); 
    result = (BigCommerceOrderProducts)jsSerializer.Deserialize<BigCommerceOrderProducts>(jsonData); 
} 

Aquí está el subconjunto de la cadena de datos devuelto por JSON como jsonData. Eliminé campos adicionales.

"[ 
{\"id\":33,\"order_id\":230025,...}, 
{\"id\":34,\"order_id\":230025,...} 
]" 

Éstos son los objetos:

[Serializable] 
public class BigCommerceOrderProducts { 
    public List<BigCommerceOrderProduct> Data { get; set; } 
} 

[Serializable] 
public class BigCommerceOrderProduct { 
    public int Id { get; set; } 
    public int Order_id { get; set; } 
    ... 
} 

que estoy recibiendo este error:

"Type 'Pxo.Models.BigCommerce.BigCommerceOrderProducts' is not supported for deserialization of an array. 

¿Alguna idea?

+0

¿Está tu cadena json envuelta en un objeto .NET? échale un vistazo aquí: http://stackoverflow.com/questions/402996/deserializing-json-objects-as-listtype-not-working-with-asmx-service – JoJa

Respuesta

46

Debe deserializar su cadena json para escribir List<BigCommerceOrderProduct>. No hay necesidad de BigCommerceOrderProducts clase

var myobj = jsSerializer.Deserialize<List<BigCommerceOrderProduct>>(jsonData); 
+0

Gracias, eso tiene sentido ahora. Déjame intentarlo nuevamente e informar. – Dean

+1

¡Esto funcionó de maravillas! Gracias. – Dean

1

Este pequeño proggy funciona bien para mí. Podría ser algo inesperado en la secuencia de respuesta.

La salida JSON es: { "Data": [{ "id": 33, "ORDER_ID": 230,025}, { "id": 34, "ORDER_ID": 230025}]}

JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 

    BigCommerceOrderProducts a = new BigCommerceOrderProducts(); 
    a.Data = new List<BigCommerceOrderProduct>(); 
    BigCommerceOrderProduct b = new BigCommerceOrderProduct(); 
    b.Id = 33; 
    b.Order_id = 230025; 

    a.Data.Add(b); 

    b = new BigCommerceOrderProduct(); 
    b.Id = 34; 
    b.Order_id = 230025; 

    a.Data.Add(b); 

    string x = jsSerializer.Serialize(a); 
    Console.WriteLine(x); 

    a = jsSerializer.Deserialize<BigCommerceOrderProducts>(x); 

    Console.WriteLine(a.Data[0].Order_id); 

    Console.ReadLine(); 
+0

Chris, '" [{\ "id \": 33, \ "order_id \": 230025, ...}, {\ "id \": 34, \ "order_id \": 230025, ...}] "' es un array, por otro lado '{" Data ": [{" Id ": 33," Order_id ": 230025}, {" Id ": 34," Order_id ": 230025}]}' es un objeto que contiene una matriz. Dos cosas diferentes –

+0

Sí, sé la diferencia. O el OP dejó el "Datos": parte o el OP está tratando de deserializar un conjunto a List <>. Entonces, el json devuelto en la respuesta es incorrecto, o el OP necesita deserializarse en BigCommerceOrderProduct []. –

+0

Ver mi respuesta, la respuesta es correcta y se puede deserializar a la Lista. (Nunca publico un código antes de ejecutar en mi máquina o lo marcó como * NO PRUEBA *) –