ASP.NET MVC 4 ApiController不会序列化所有属性

时间:2012-02-23 19:42:52

标签: asp.net-mvc-4 asp.net-web-api

我正在测试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
}

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

1 个答案:

答案 0 :(得分:1)

Readonly属性未序列化。如果要将Metadata属性的setter序列化,请将其设置为public。我认为这种行为对于输入参数是正常的,但对于你的情况不是输出。恕我直言could be workarounded这是一个错误{{3}}使用JSON序列化程序支持这个,但也许他们会在最终版本之前修复它,并允许为输出参数序列化readonly属性。

实际上这并不是一个很大的痛苦,因为你应该使用视图模型,所以只需将你的域模型映射到一个视图模型,让你的方法返回这个视图模型,它只包含你需要实际公开的属性。客户端。此视图模型将包含具有公共getter和setter的属性。