我有这个ASP.NET Core 2.0 MVC控制器:
[Route("api/[controller]")]
public class SampleDataController : Controller
{
[HttpGet("[action]")]
public Example Demo()
{
return new Example("test");
}
public class Example
{
public Example(string name)
{
Name = name;
}
public string Name { get; }
public IEnumerable<Example> Demos
{
get { yield return this; }
}
}
}
查询/api/SampleData/Demo
时,我得到了回复正文:
{"name":"test","demos":[
...这显然是非常破碎的类JSON输出。
我如何以及在何处配置基于ASP.Net Core 2.0 MVC的应用程序,以使框架以不破坏输出的方式序列化循环引用? (例如,通过引入$ref
和$id
。)
答案 0 :(得分:3)
为了打开JSON.Net序列化的引用,您应该将PreserveReferencesHandling
SerializerSettings
属性设置为PreserveReferencesHandling.Objects
枚举值。
在ASP.Net Core中,您可以通过Startup.ConfigureServices
方法中的调整来实现:
services.AddMvc()
.AddJsonOptions(opt =>
{
opt.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
});
现在模型将被序列化为以下正确的JSON:
{
"$id": "2",
"name": "test",
"demos": [ { "$ref": "2" } ]
}