什么是循环引用和循环?

时间:2015-05-30 03:15:53

标签: asp.net

public class Employee
{
    public string Name { get; set; }
    public Department Department { get; set; }
}

public class Department
{
    public string Name { get; set; }
    public Employee Manager { get; set; }
}

public class DepartmentsController : ApiController
{
    public Department Get(int id)
    {
        Department sales = new Department() { Name = "Sales" };
        Employee alice = new Employee() { Name = "Alice", Department = sales };
        sales.Manager = alice;
        return sales;
    }
}

控制器操作将返回此JSON(在更改设置以保留对象引用之后)

{  
   "$id":"1",
   "Name":"Sales",
   "Manager":{  
      "$id":"2",
      "Name":"Alice",
      "Department":{  
         "$ref":"1"
      }
   }
}

显然Employee.Department属性会创建一个循环,为什么会出现问题?这个循环究竟是什么?我没有看到它。

2 个答案:

答案 0 :(得分:0)

因为员工有部门,部门有员工。这是循环依赖。每个都需要另一个的定义。

例如:Bob - >电气 - >史蒂夫 - >家居用品 - >鲍勃......

答案 1 :(得分:0)

这种情况正在发生,因为它实际上是一个循环循环。一个部门指向一个员工,该员工指向同一个部门,该部门指向同一个员工,该员工指向同一个部门......你会看到我在这里得到的信息。序列化Department会产生无限长度的字符串。

如果您只是设置alice.Department = null,它应解决无限循环。既然你已经知道sales.Manager = alice,那么基本上没有不可挽回的数据。