我在我的启动类中使用以下代码来防止序列化我的实体的错误,这可能会导致循环引用,但它无法正常工作。
为什么?
HTTP.sys
答案 0 :(得分:0)
根据您的描述,我创建了我的Azure Mobile App项目来测试此问题。根据您的Startup.cs
,我添加了apiController
,如下所示:
[MobileAppController]
public class ValuesController : ApiController
{
[Route("api/values")]
public HttpResponseMessage Get()
{
Department sales = new Department() { Name = "Sales" };
Employee alice = new Employee() { Name = "Alice", Department = sales };
sales.Manager = alice;
return Request.CreateResponse(sales);
}
}
public class Employee
{
public string Name { get; set; }
//[JsonIgnore]
public Department Department { get; set; }
}
public class Department
{
public string Name { get; set; }
public Employee Manager { get; set; }
}
访问此端点时,我遇到以下XML Circular Object References错误:
注意:为简单起见,我通过config.Formatters.Remove(config.Formatters.XmlFormatter);
删除了XML Formatter。另外,您可以参考Handling Circular Object References中有关保留XML中对象引用的部分。
删除XML Formatter之后,我在JSON中遇到了关于对象引用循环的以下错误:
然后,我按照这个Loop Reference handling in Web API代码示例,但最后没有运气。此外,我尝试创建一个新的Web API项目,发现ReferenceLoopHandling.Ignore
可以按预期工作。
最后,我发现如果我删除了MobileAppController
属性
apiController
,然后它可以如下工作:
总之,我假设您可以尝试使用JSON.NET的 JsonIgnore 来忽略引用属性,有关详细信息,请参阅fix 3:Ignore and preserve reference attributes。