ReferenceLoopHandling.Ignore不适用于Azure Mobile App Service以忽略循环引用的序列化

时间:2017-05-10 02:13:59

标签: azure-mobile-services azure-sdk

我在我的启动类中使用以下代码来防止序列化我的实体的错误,这可能会导致循环引用,但它无法正常工作。

为什么?

HTTP.sys

1 个答案:

答案 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错误:

enter image description here

注意:为简单起见,我通过config.Formatters.Remove(config.Formatters.XmlFormatter);删除了XML Formatter。另外,您可以参考Handling Circular Object References中有关保留XML中对象引用的部分。

删除XML Formatter之后,我在JSON中遇到了关于对象引用循环的以下错误:

enter image description here

然后,我按照这个Loop Reference handling in Web API代码示例,但最后没有运气。此外,我尝试创建一个新的Web API项目,发现ReferenceLoopHandling.Ignore可以按预期工作。

最后,我发现如果我删除了MobileAppController属性 apiController,然后它可以如下工作:

enter image description here

总之,我假设您可以尝试使用JSON.NET的 JsonIgnore 来忽略引用属性,有关详细信息,请参阅fix 3:Ignore and preserve reference attributes