1

我正在 asp.net mvc 4 beta 中测试新的 ApiController,但是当我尝试返回一个如下所示的类时,只有几个属性被序列化?

public class PageModel : IPageModel {
    public string Id { get; set; }
    public virtual IPageMetadata Metadata { get; private set; }
    public PageModel() {
        Metadata = new PageMetadata();
    }
}

这是我的 api 控制器中的代码

    // GET /api/pages/5
    public PageModel Get(string id) {
        return new PageModel { Id = "pages/1", Metadata = {Name = "Foo"} };
    }

这就是结果

{
Id: "pages/1",
Parent: null
}

是否有可能获得完整的对象而不仅仅是一些东西?

4

1 回答 1

1

只读属性未序列化。Metadata如果您希望对其进行序列化,请将属性的设置器设为公开。我认为这种行为对于输入参数来说是正常的,但对于你的输出来说却不是。恕我直言,这是一个可以通过使用支持此功能的 JSON 序列化程序来解决的错误,但也许他们会在最终版本之前修复它,并允许为输出参数序列化只读属性。

实际上,这并不是什么大问题,因为无论如何您都应该使用视图模型,因此只需将您的域模型映射到视图模型,并让您的方法返回这个视图模型,该视图模型将仅包含您需要实际公开给客户端的属性。此视图模型将包含具有公共 getter 和 setter 的属性。

于 2012-02-23T19:48:34.367 回答