2012-01-27 19 views
18

.NET MVC3'te bir dizinin seri hale getirilmesinde sorun yaşıyorum, herhangi bir yardım için teşekkür ederiz.JavaScriptSerializer.Deserialize array

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

İşte jsonData olarak JSON tarafından döndürülen veri dizesi alt kümesidir:

İşte kod parçacığı bu. Ek alanları temizliyorum. Bu hatayı alıyorum

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

:

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

Herhangi bir fikir

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

İşte nesnelerdir?

+0

.NET nesnesine sarılmış json dizginiz mi? Burada bir göz atın: http://stackoverflow.com/questions/402996/deserializing-json-objects-as-listtype-not-working-with-asmx-service – JoJa

cevap

46

Json dizginizi List<BigCommerceOrderProduct> yazarak deserialize etmelisiniz. BigCommerceOrderProducts sınıfa

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

Teşekkürler, bu şimdi mantıklı. Tekrar deneyip rapor vereyim. – Dean

+1

Bu harikalar çalıştı! Teşekkürler. – Dean

1

Bu küçük proggy gerek yok benim için çalışıyor. Yanıt akışında beklenmeyen bir şey olabilir.

json çıktısı: { "Veri": [{ "Kimlik": 33, "ORDER_ID": 230.025}, { "Kimlik": 34, "ORDER_ID": 230.025}]}

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, '" [{\ "kimlik \": 33, \ "order_id \": 230025, ...}, {\ "id \": 34, \ "order_id \": 230025, ...}] "' diğer taraftan bir dizi '{"Veri": [{"Kimlik": 33, "Order_id": 230025}, {"Kimlik": 34, "Order_id": 230025}]} 'bir nesnedir bir dizi içerir. İki farklı şey. –

+0

Evet, farkı biliyorum. OP, "Data": parçasını bıraktı ya da OP, bir diziyi <> listesine dizgelemek için çalışıyor. Yani ya cevapta geri dönen json yanlıştır, ya da OP'nin yerine BigCommerceOrderProduct [] 'a gönderilmesi gerekir. –

+0

Cevabımı görün, yanıt doğru ve Listeye gönderilebilir. (Makinemde çalıştırmadan önce asla bir kod yayınlamıyorum ya da ben * UNTESTED * olarak işaretleyin) –