我使用.NET MVC开发API并以JSON格式返回结果。起初它似乎工作正常,我从数据库返回的结果为IEnumerable,然后转换为JSONResult类型返回。
这为我编制了序列化,并且基于设计者中的关系自动加载子对象,并成为JSON hierra的一部分。
IEnumerable<Book> books= _contentRepository.GetBooks();
return Json(new {
success = true,
data = new {
books = books
}
}, JsonRequestBehavior.AllowGet);
这种能力也是问题,因为有时加载一整套子对象,我不需要。例如,假设我有一本有相关书籍的书籍实体,这些相关书籍也有相关书籍,树很快就会很快。
Rick Strahl在他的文章结尾处谈到这一点:http://www.west-wind.com/weblog/posts/147218.aspx
我仍然希望保持一个hierrachy,所以json也是hierrachical。例如book.author,book.publisher [0] .name但我想控制查询中加载的内容。
我是否正在考虑删除设计器中实体之间的所有链接,并在查询或查询中指定连接,并可能手动编制最终的hierrachy?
答案 0 :(得分:1)
我会使用一个视图模型:一个专门为满足视图要求而定制的类(或者在您的情况下是JSON结构)。然后在从数据库获取的模型和视图模型之间具有控制器操作map。现在你完全掌控了。
IEnumerable<Book> books = _contentRepository.GetBooks();
IEnumerable<BookViewModel> bookViewModels = Mapper.Map<IEnumerable<Book>, IEnumerable<BookViewModel>>(books);
return Json(
new { success = true, data = bookViewModels },
JsonRequestBehavior.AllowGet
);
答案 1 :(得分:0)
如何自动加载相关对象?通常,这些集合是延迟的EntitySet实例,如果未枚举它们,则不会加载它们。你确定你遇到了你想要解决的问题吗?