我有两个表,它们通过OneToMany关系链接在一起。 Table1具有Table2主键的外键。
当我使用LINQtoSQL获取Table1中的一行时,它会自动获取Table2的数据.Table2引用Table1中的行,它也试图获取..然后我们去了,无限循环
Guid productIdGuid = Guid.Parse(productId);
var info = (from row in db.Info
where row.ProductId == productIdGuid &&
row.ComputerId == null &&
row.DeletedAt == null
select row).FirstOrDefault();
return license;
当我将info转换为JSON时,我收到stackoverflow错误,其中包含以下内容:
JsonConvert.SerializeObject(info);
然而我可以解决这个问题:
JsonConvert.SerializeObject(input, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
但这里的结果看起来不太好
{
"$id":"1",
"ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
"ComputerId":null,
"Table2":{
"$id":"2",
"Id":"a8a78902-777c-4be9-a240-a5e47af6f144",
"Reference":"10456975",
"Table1":[
{
"$id":"3",
"ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
"ComputerId":"63e57ee7-14d3-e611-80dc-0050569ea396",
"Table2":{
"$ref":"2"
}
},
{
"$ref":"1"
},
.....
]
}
}
我不希望它继续获取表之间的子节点/链接。我只想要一个链接,结果看起来像这样:
{
"$id":"1",
"ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
"ComputerId":null,
"Table2":{
"$id":"2",
"Id":"a8a78902-777c-4be9-a240-a5e47af6f144",
"Reference":"10456975",
}
}
有什么想法吗?
答案 0 :(得分:1)
您可以将Table2类中的[JsonIgnore]
属性添加到您要忽略的所有属性,在您的情况下,这些属性将是Table1参考
public class Table2
{
...
[JsonIgnore]
public ICollection<Table1> Table1 { get; set; }
...
}