ASP.NET MVC:将JSON in Action作为匿名对象接受

时间:2014-03-05 14:10:55

标签: jquery asp.net-mvc json post

我正在使用JSON数据向控制器操作发出POST Ajax请求,如下所示:

$.ajax({
    type: "POST",
    url: "/AssembleProducts/UpdateProduct",
    data: JSON.stringify({ Product: Product }),
    contentType: "application/json; charset=utf-8",
    dataType: 'json'
});

动作方法如下所示:

[HttpPost]
public void UpdateProduct(Product Product)
{

}

我可以接受JSON数据为Product,但我希望能够将其作为匿名对象接受。所以,我不需要Type来接受数据。我尝试使用dynamicobject关键字作为参数类型而不是Product,但即使在线查找相关主题,仍然不成功。

请就此情况提出建议。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

客户方:

data: { product: JSON.stringify(Product) }

服务器端:

string productJson = HttpContext.Current.Request.Form["product"];

Product p = new JavaScriptSerializer().Deserialize<Product>(productJson);

答案 1 :(得分:1)

我很清楚:我正在阅读如下:你有一个模特产品:

class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    // etc
}

您想要使用附加元数据发布产品:

var productJsonObject = {
    ProductId: 1,
    ProductName: 'widget',
    MetaField: 'xyz'
}

如果是这种情况,要在您的操作中获取MetaField,您可以尝试直接查询价值提供者:

[HttpPost]
public void UpdateProduct(Product Product)
{
    var metaField = ControllerContext.Controller.ValueProvider.GetValue("MetaField");
}