如何在javascript中创建嵌套的对象列表

时间:2012-12-04 21:36:39

标签: javascript asp.net

我正在尝试在Javascript中创建Product实例,而不是使用[webmethod]将其传递到服务器。

[WebMethod]
public static void SetProduct(Product product)
{    
     // i want a product instance    
}

以下是我要创建的Product课程:

public class Product
{
    public Type Type { get; set; }
    public Foo Foo { get; set; }
    public List<Bar> Bars { get; set; }
}

public class Type
{
    public string ID { get; set; }
}

public class Foo
{
    public string ID { get; set; }
    public string Color { get; set; }
}

public class Bar
{
    public string Name { get; set; }
}

我可以在Javascript中创建TypeFoo但不能创建List<Bar> :(有关详细信息,请参阅我在代码中的评论)

的Javascript

function setProduct() {
    var product = {};
    product.Type = {};
    product.Foo = {};

    product.Type.ID = 'typeID';
    product.Foo.ID = 'fooID';
    product.Foo.Color = 'fooColor';

    //here is my question how can create List<Bar> Bars and add it to product item???

    $.ajax({
        type: "POST",
        url: "Default.aspx/SetProduct",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        data: "{product:" + JSON.stringify(product) + "}",
    });
}

3 个答案:

答案 0 :(得分:0)

// create an array
product.Bars = [];

// add an element to the array
product.Bars.push({
    Name: "Foo"
});

或者您也可以使用元素初始化数组:

// create and initialize array
product.Bars = [{Name:"Foo"}, {Name:"Bar"}];

答案 1 :(得分:0)

使用数组,并使用array.push将项目添加到数组中。例如:

product.Bars = [];
product.Bars.push({ Name: "foo" });

答案 2 :(得分:0)

JavaScript不知道List<T>是什么。它只知道如何制作数组。所以你必须构造一个Bar的数组并在JSON中传递它。

幸运的是,这很容易解决:

product.Bars = [
    { Name: "bar 1" },
    { Name: "bar 2" },
    { Name: "bar 3" },
];

以上可能就是你所需要的。我非常确定ASP.NET会足够聪明,可以自动将Bar[]转换为List<Bar>,但万一它不是:

public class Product
{
    public Type Type { get; set; }
    public Foo Foo { get; set; }
    public IEnumerable<Bar> Bars { get; set; }
}

然后,如果您仍然需要List<T>功能,只需将数组转换为WebMethod中的List:

[WebMethod]
public static void SetProduct(Product product)
{    
     var list = product.Bars.ToList();
     product.Bars = list;
     return product;
}

现在您仍然可以访问那些不错的List<T>方法:

((List<Bar>)product).Add(new Bar() { Name = "bar 4" });