2012-03-06 14 views
5

Tôi đang sử dụng WebApi mới là một phần của bản beta MVC4. Tôi có lớp sau:Deserialization/mô hình ràng buộc trong MVC4 webapi không hoạt động với mảng

public class Voucher 
{ 
    public string Id { get; set; } 
    public string TableId { get; set; } 
    public Product[] Products { get; set; } 
} 

điều khiển của tôi trông như thế này:

public class VouchersController : ApiController 
{ 
    public Voucher PostVoucher(Voucher voucher) 
    { 
      //.... 
    } 
} 

Về phía khách hàng tôi serialize dữ liệu sử dụng một XmlSerializer. Đầu ra trông giống như mong đợi và mảng Products được tuần tự hóa. Nếu tôi đăng dữ liệu và đặt điểm ngắt bên trong phương thức PostVoucher, tôi sẽ nhận được dữ liệu cho IdTableId, nhưng Productsnull. Bất kỳ gợi ý những gì tôi có thể làm sai?

+0

Chỉ là một câu hỏi, bạn đã thêm thuộc tính Nối tiếp trong cả hai lớp (Phiếu thưởng và Sản phẩm) chưa? –

+2

Bạn không cần thuộc tính '[Serializable]', các lớp không có bất kỳ thuộc tính nào (ví dụ: POCO) hoạt động tốt. – carlosfigueira

Trả lời

6

Có vấn đề với mô hình ràng buộc/deserialization các loại phức tạp và XML trong ASP.NET Web API Beta. Một cách để giải quyết vấn đề này là "vô hiệu hóa" mô hình ràng buộc, và chọn "đường dẫn deserialization" cho hành động này. Bài đăng tại số http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/27/disabling-model-binding-on-asp-net-web-apis-beta.aspx cho biết cách thực hiện điều đó.

Lưu ý rằng đây là sự cố đã biết cho bản beta và sẽ được khắc phục trong bản phát hành tiếp theo (RC).

+0

Cảm ơn bạn vì điều này. Tôi đã rách tóc ra để cố gắng giải thích tại sao hành động của tôi lại vui vẻ chấp nhận JSON nhưng thất bại trong việc deserialise XML. – Nick