欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

ef 轉(zhuǎn)json 死循環(huán)

在使用ef將數(shù)據(jù)轉(zhuǎn)換為json格式時(shí),我們可能會(huì)遇到死循環(huán)的問題,這時(shí)我們需要對(duì)數(shù)據(jù)進(jìn)行處理才能順利轉(zhuǎn)換。

public class User
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection
Addresses { get; set; } } public class Address { public int Id { get; set; } public string Street { get; set; } public virtual User User { get; set; } }

以上是一組簡(jiǎn)單的實(shí)體類,注意到User類中有一個(gè)虛擬導(dǎo)航屬性ICollection

Addresses,它表示一個(gè)用戶可以擁有多個(gè)地址。如果繼續(xù)往下轉(zhuǎn)換為json格式,將會(huì)發(fā)現(xiàn)程序陷入死循環(huán)。這是因?yàn)閖son序列化會(huì)遞歸將實(shí)體類中的導(dǎo)航屬性序列化為json,而在User類中的Addresses屬性又會(huì)反過(guò)來(lái)引用User類,導(dǎo)致進(jìn)入死循環(huán)。

解決這個(gè)問題的方法有很多,我們可以手動(dòng)設(shè)置導(dǎo)航屬性為null或移除導(dǎo)航屬性等。但這些方法都比較麻煩,我們可以使用第三方庫(kù)來(lái)簡(jiǎn)化操作。

//使用Newtonsoft.Json庫(kù)進(jìn)行序列化
var settings = new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var json = JsonConvert.SerializeObject(user, Formatting.Indented, settings);

在使用Newtonsoft.Json庫(kù)進(jìn)行序列化時(shí),只需設(shè)置ReferenceLoopHandling屬性為Ignore即可忽略序列化導(dǎo)航屬性引用。這樣就可以順利地將實(shí)體類數(shù)據(jù)轉(zhuǎn)換為json格式了。