Are*_*aas 10 .net serialization json asp.net-web-api
假设我有这些关系的权利:这只是一个虚构的例子,而不是我现在的实体.
课程有很多用户,用户有很多课程
课程有很多NewsPosts,NewsPosts有很多课程
用户有很多NewsPosts,NewsPosts有很多用户
我首先使用.NET Web API实现实体框架代码,它以JSON的形式发回实体.当我尝试获取一个课程时,它会发回一个带有entites关系的JSON结果,这很好,但我希望设置一个限制它序列化的级别,所以它不会序列化所有关系超出第一个或二级.
GET课程/将序列化为:
{
"Users":[{
"id":1,
"newsPosts": [{
"id":1,
"message":"foo"
}]
}],
"newsPosts":[{
"id":2,
"message":"bar"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想要的是仅序列化1个或2个级别,结果将是:
{
"Users":[{
"id":1,
"newsPosts": []
}],
"newsPosts":[{
"id":2,
"message":"bar"
}]
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个:
json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
Run Code Online (Sandbox Code Playgroud)
这是删除referencelooping.
简而言之:有没有办法设置最大数量的节点来序列化?
在我看来,你有两个选择:
对于 API 而言,最佳实践之一是仅发回所需的数据,因为这会影响发回的数据大小。
实体框架以某种方式工作,提供了太多的东西,而你想限制它。解决此问题的常见方法是不让 API 返回实体框架实体。造成这种情况的原因有很多,可以单独研究。
因此,一种方法是开始使用 DTO 返回数据。这有很多优点:
缺点:
归档时间: |
|
查看次数: |
4672 次 |
最近记录: |