为什么我的全视图模型没有被ApiController序列化?

时间:2012-04-24 17:08:57

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

ClientIndexModel我有以下类型层次结构:

public class ViewModel
{
    public virtual IDictionary<string, SelectList> SelectListDictionary
    {
        get
        {
            var props = GetType().GetProperties().Where(p => p.PropertyType == typeof(SelectList));
            return props.ToDictionary(prop => prop.Name, prop => (SelectList)prop.GetValue(this, null));
        }
    }
}
public class IndexModel<TIndexItem, TEntity> : ViewModel where TIndexItem : ViewModel where TEntity : new()
{
    public List<TIndexItem> Items { get; private set; }
}
public class ClientIndexModel: IndexModel<ClientIndexItem, Client>
{
}

我实例化并从ApiController返回ClientIndexModel,如下所示:

public ClientIndexModel Get()
{
    var model = new ClientIndexModel();
    return model;
}

如果我在model行上使用断点检查return model;,则Items属性存在,计数为0.但是,此操作返回的JSON只有{ {1}}属性,没有SelectListDictionary属性。为什么会这样?

1 个答案:

答案 0 :(得分:2)

您的Items酒店有私人二手商家。具有私有setter的属性有意在序列化中被省略,因为序列化它们是没有意义的,因为它们永远不能被反序列化,因为它们的值不能从外部修改。因此,您应该完全删除setter(就像您对SelectListDictionary属性所做的那样),将其公开或使用一些能够使用私有setter序列化属性的自定义序列化程序编写自定义格式化程序。