MVC4 webapi中的反序列化/模型绑定不适用于数组

Posted

技术标签:

【中文标题】MVC4 webapi中的反序列化/模型绑定不适用于数组【英文标题】:Deserialization / model binding in MVC4 webapi does not work with arrays 【发布时间】:2012-03-24 11:18:02 【问题描述】:

我正在使用新的 WebApi,它是 MVC4 测试版的一部分。我有以下课程:

public class Voucher

    public string Id  get; set; 
    public string TableId  get; set; 
    public Product[] Products  get; set;  

我的控制器如下所示:

public class VouchersController : ApiController

    public Voucher PostVoucher(Voucher voucher)
    
          //....
    

在客户端,我使用XmlSerializer 序列化数据。输出看起来像预期的那样,Products 数组已序列化。如果我发布数据并在PostVoucher 方法中放置一个断点,我会得到IdTableId 的数据,但Productsnull。任何提示我可能做错了什么?

【问题讨论】:

只是一个问题,您是否在两个类(Voucher 和 Product)中都添加了 Serializable 属性? 您不需要 [Serializable] 属性,没有任何属性的类(即 POCO)可以正常工作。 【参考方案1】:

在 ASP.NET Web API Beta 中,复杂类型和 XML 的模型绑定/反序列化存在问题。解决此问题的一种方法是“禁用”模型绑定,并为此操作选择“反序列化路径”。 http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/27/disabling-model-binding-on-asp-net-web-apis-beta.aspx 的帖子显示了如何做到这一点。

请注意,这是一个已知的 beta 问题,将在下一个 (RC) 版本中修复。

【讨论】:

谢谢你。我一直在努力弄清楚为什么我的操作很乐意接受 JSON 但未能反序列化 XML。

以上是关于MVC4 webapi中的反序列化/模型绑定不适用于数组的主要内容,如果未能解决你的问题,请参考以下文章

如何传递 WebAPI 控制器数据,以便发布模型在绑定/反序列化或验证时可以访问

ASP.NET MVC4 视图中的模型和 ItemModel 绑定

复杂抽象对象的WebAPI自定义模型绑定

模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求

来自 JSON 的 WebAPI 模型绑定

Jackson Deserializer 委托给下一个适用的反序列化器