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
方法中放置一个断点,我会得到Id
和TableId
的数据,但Products
是null
。任何提示我可能做错了什么?
【问题讨论】:
只是一个问题,您是否在两个类(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 绑定