5

Я использую новый WebApi, который является частью бета-тестирования MVC4. У меня есть следующий класс:Связывание десериализации/моделирование в MVC4 webapi не работает с массивами

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. Любой намек на то, что я могу сделать неправильно?

+0

Вопрос только что вы добавили атрибут Serializable в оба класса (ваучер и продукт)? –

+2

Вам не нужен атрибут '[Serializable]', классы без каких-либо атрибутов (т. Е. POCO) работают нормально. – carlosfigueira

ответ

6

Возникла проблема с привязкой/десериализацией модели сложных типов и XML в бета-версии веб-API ASP.NET. Один из способов решения этой проблемы - «отключить» привязку модели и выбрать «путь десериализации» для этого действия. Сообщение об http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/27/disabling-model-binding-on-asp-net-web-apis-beta.aspx показывает, как это сделать.

Обратите внимание, что это известная проблема для бета-версии и будет исправлена ​​в следующем выпуске (RC).

+0

Спасибо за это. Я рвал свои волосы, пытаясь понять, почему мои действия были счастливы принять JSON, но не смогли десериализовать XML. – Nick