C# JavaScriptSerializer.反序列化数组

C# JavaScriptSerializer.反序列化数组,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,在.NETMVC3中反序列化数组时遇到问题,如有任何帮助,将不胜感激 下面是代码片段: using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { JavaScriptSerializer jsSerializer = new JavaScr

在.NETMVC3中反序列化数组时遇到问题,如有任何帮助,将不胜感激

下面是代码片段:

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);
}
以下是对象:

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

有什么想法吗?

您应该将json字符串反序列化为键入
List
。不需要
BigCommerceOrderProducts
class

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

这个小程序对我来说很好。响应流中可能出现意外情况

json输出为:{“Data”:[{“Id”:33,“Order_Id”:230025},{“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();
JavaScriptSerializer jsSerializer=新的JavaScriptSerializer();
BigCommerceOrderProducts a=新的BigCommerceOrderProducts();
a、 数据=新列表();
BigCommerceOrderProduct b=新的BigCommerceOrderProduct();
b、 Id=33;
b、 订单号=230025;
a、 数据.添加(b);
b=新的BigCommerceOrderProduct();
b、 Id=34;
b、 订单号=230025;
a、 数据.添加(b);
字符串x=jsSerializer.Serialize(a);
控制台写入线(x);
a=jsSerializer.Deserialize(x);
Console.WriteLine(a.Data[0].Order\u id);
Console.ReadLine();

您的json字符串是否包装在.NET对象中?看看这里:Chris,
“[{“id\”:33,\“order\u id\”:230025,…},{“id\”:34,\“order\u id\”:230025,…}]
是一个数组,另一方面,
{“Data”:[{“id”:33,“order\u id”:230025},{“id”:34,“order\u id”:230025}}
是一个包含数组的对象。两件不同的事。是的,我知道区别。OP遗漏了“数据”:部分,或者OP正在尝试反序列化要列出的数组。因此,要么响应中返回的json不正确,要么OP需要反序列化为BigCommerceOrderProduct[]。请参见我的回答,响应是正确的,可以反序列化为List。(在我的机器上运行之前,我从未发布过代码,或者我将其标记为未经测试)谢谢,这现在是有意义的。让我再试一次,然后再报告。
var myobj = jsSerializer.Deserialize<List<BigCommerceOrderProduct>>(jsonData);
    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();