2012-01-27 31 views
18

Tôi gặp sự cố khi deserializing một mảng trong .NET MVC3, mọi trợ giúp sẽ được đánh giá cao.JavaScriptSerializer.Deserialize array

Dưới đây là đoạn mã:

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

Dưới đây là tập hợp con của chuỗi dữ liệu trả về bởi JSON như jsonData. Tôi đã xóa thêm các trường.

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

Dưới đây là các đối tượng:

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

Tôi nhận được lỗi này:

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

Bất kỳ ý tưởng?

+0

là chuỗi json của bạn được bao bọc trong một đối tượng .NET? có một cái nhìn ở đây: http://stackoverflow.com/questions/402996/deserializing-json-objects-as-listtype-not-working-with-asmx-service – JoJa

Trả lời

46

Bạn nên deserialize chuỗi json của bạn để nhập List<BigCommerceOrderProduct>. Không cần cho BigCommerceOrderProducts lớp

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

Cảm ơn, điều đó có ý nghĩa bây giờ. Hãy để tôi thử lại và báo cáo lại. – Dean

+1

Điều này làm việc kỳ diệu! Cảm ơn. – Dean

1

Khoản tiền nhỏ này làm việc tốt cho tôi. Có thể có điều gì đó không mong muốn trong luồng phản hồi.

Sản lượng json là: { "dữ liệu": [{ "id": 33, "ORDER_ID": 230.025}, { "id": 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, '" [{\ "id \": 33, \ "order_id \": 230025, ...}, {\ "id \": 34, \ "order_id \": 230025, ...}] "' là một mảng, mặt khác '{" Dữ liệu ": [{" Id ": 33," Order_id ": 230025}, {" Id ": 34," Order_id ": 230025}]}' là một đối tượng chứa một mảng. Hai thứ khác nhau. –

+0

Vâng, tôi biết sự khác biệt. OP còn lại là "Dữ liệu": một phần hoặc OP đang cố gắng loại bỏ một mảng thành Danh sách <>. Vì vậy, hoặc json trả về trong phản hồi là không chính xác, hoặc OP cần phải deserialize để BigCommerceOrderProduct [] thay thế. –

+0

Xem câu trả lời của tôi, câu trả lời là chính xác và có thể được deserialized vào Danh sách. (Tôi không bao giờ đăng một mã trước khi chạy trên máy tính của mình hoặc tôi đánh dấu nó là * UNTESTED *) –