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
属性会创建一个循环,为什么会出现问题?这个循环究竟是什么?我没有看到它。
答案 0 :(得分:0)
因为员工有部门,部门有员工。这是循环依赖。每个都需要另一个的定义。
例如:Bob - >电气 - >史蒂夫 - >家居用品 - >鲍勃......
答案 1 :(得分:0)
这种情况正在发生,因为它实际上是一个循环循环。一个部门指向一个员工,该员工指向同一个部门,该部门指向同一个员工,该员工指向同一个部门......你会看到我在这里得到的信息。序列化Department
会产生无限长度的字符串。
如果您只是设置alice.Department = null
,它应解决无限循环。既然你已经知道sales.Manager = alice
,那么基本上没有不可挽回的数据。