Linq to SQL过热的序列化

时间:2011-02-18 04:11:03

标签: asp.net-mvc linq json linq-to-sql serialization

我使用.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?

2 个答案:

答案 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实例,如果未枚举它们,则不会加载它们。你确定你遇到了你想要解决的问题吗?