我收到以下错误:“检测到属性的自引用循环'DefaultAssignTo'”
这是我正在尝试序列化的课程:
public class Account
{
public int Id { get; set; }
public string AccountName { get; set; }
[JsonConverter(typeof(AccountConverter))]
public virtual Account DefaultAssignTo { get; set; }
public int? DefaultAssignToId { get; set; }
public virtual ICollection<Role> Roles { get; set; }
[JsonConverter(typeof(OtherConverter))]
public virtual Other Other { get; set; }
public int? OtherId { get; set; }
[JsonIgnore]
public string OtherName
{
get
{
return "Name = " + this.AccountName;
}
}
}
我知道我可以通过添加如下设置来阻止这种情况,但在尝试反序列化时会导致问题。
var settings = new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
PreserveReferencesHandling = PreserveReferencesHandling.All
};
如您所见,我创建了几个自定义转换器。 Other
类的一个工作,但Account
类的一个永远不会被调用。我猜这是因为,当ContractResolver到达DefaultAssignTo
时,Account
,Account
已签订合同,因此永远不会使用自定义转换器。
以下是我的问题:
如果无法回答#1:
编辑:(我最终想要实现的用例如下所示)
Account
将被分配给某个人。 (例如Task
)当Account
创建Task
时,如果DefaultAssignedTo
不为空,则将Task
分配给{{1}的值}}。 DefaultAssignedTo
可以引用包含DefaultAssignedTo
的其他Account
或Account
。
因此,如果两个帐户中有两个DefaultAssignedTo
John和Jane,其中Accounts
设置为John。当Jane创建DefaultAssignedTo
时,它将被分配给John,当John创建任务时,它将被分配给John。 Jane将按预期序列化,但John抛出自引用循环异常。
编辑:
我应该明确表示我不希望或要求Task
成为完整的序列化。自定义转换器的目的是删除导致自引用循环的原因,但仍然序列化DefaultAssignedTo
中包含的其他数据。