【问题标题】:ASP.NET MVC: Accept JSON in Action as Anonymous ObjectASP.NET MVC:接受 JSON 作为匿名对象
【发布时间】:2014-03-05 14:10:55
【问题描述】:

我正在使用如下 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 但我希望能够接受它作为 Anonymous Object 。所以,我不需要Type 来接受数据。我尝试使用dynamicobject 关键字作为参数类型而不是Product,但即使在网上找到相关主题也仍然失败。

请就这种情况提出建议。

【问题讨论】:

  • 为什么要接受Anonymous object?你想达到什么目标?
  • @Murali 我正在尝试获取从客户端发送的数据。但是有些属性只是服务器端条件的标志,所以我的模型/类型中不需要它们,并且只为几个标志属性制作另一整套 DTO 对我来说似乎有点过头了。

标签: jquery asp.net-mvc json post


【解决方案1】:

这样的事情怎么样:

客户端:

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

服务器端:

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

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

【讨论】:

  • 我认为这里正在做同样的事情,我说过我已经可以做。客户端发送的某些属性未映射到我的模型类型,我也不想创建另一个模型来获取属性的值。这就是我考虑匿名对象填充的原因。
  • @Md.lbrahim 然后改用DeserializeObjectmsdn.microsoft.com/en-us/library/…
  • 谢谢。 DeserializeObject 似乎是我要找的那个。但我无法将整个 JSON 作为字符串。因为我在HttpContext 上没有Current 属性。但我试过HttpContext.Request.Form["product"],它返回null。有什么建议吗?
  • 知道了!我将整个 JSON 作为字符串发送。使用var obj = new JavaScriptSerializer().DeserializeObject(product); 解析传递的字符串。它返回了一个匿名对象,其中包含我的数据。 FTR,var obj = new JavaScriptSerializer().Deserialize&lt;dynamic&gt;(product);var obj = new JavaScriptSerializer().Deserialize&lt;object&gt;(product); 具有相同的结果。感谢您指出正确的方向@Johan
【解决方案2】:

我很清楚:我正在阅读以下内容:您有一个模型产品:

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

【讨论】:

  • 谢谢。您的代码将来会有所帮助。但是 JSON 中有标志的层次结构,我只想将整个 JSON 解析为 Object 或匿名类型。就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2015-05-31
相关资源
最近更新 更多