我正在测试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
}
是否有可能获得完整的对象而不仅仅是一些东西?
答案 0 :(得分:1)
Readonly属性未序列化。如果要将Metadata
属性的setter序列化,请将其设置为public。我认为这种行为对于输入参数是正常的,但对于你的情况不是输出。恕我直言could be workarounded这是一个错误{{3}}使用JSON序列化程序支持这个,但也许他们会在最终版本之前修复它,并允许为输出参数序列化readonly属性。
实际上这并不是一个很大的痛苦,因为你应该使用视图模型,所以只需将你的域模型映射到一个视图模型,让你的方法返回这个视图模型,它只包含你需要实际公开的属性。客户端。此视图模型将包含具有公共getter和setter的属性。