天天看點

EntityFramework中Json序列化的循環引用問題解決--Newtonsoft.Json 解決MVC Json序列化的循環引用問題/EF Json序列化循引用問題---Newtonsoft.Json

1.在使用EF時,由于資料庫主外鍵關聯,将對象進行Json序列化時會遇到循環引用的問題

//EF 中由于資料庫主外鍵關聯,對象的序列化經常出現循環引用問題
//使用.Net 自帶的序列化工具,序列化出現循環引用問題
List<student> list = _Context.students.ToList();
JavaScriptSerializer ser = new JavaScriptSerializer();
string str = ser.Serialize(list);
Console.WriteLine(str);
           

解決方案1:使用Newtonsoft.Json工具序列化,忽略循環引用

使用方式1:

//使用Newtonsoft 的序列化工具,可以設定忽略循環引用 方法1
//但是還有有循環結構資料的轉化,隻是循環的級數固定了
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
//settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string result = JsonConvert.SerializeObject(list, settings);
Console.WriteLine(result);
           

使用方式2:

//使用Newtonsoft 的序列化工具,可以設定忽略循環引用,方法2
//但是還有有循環結構資料的轉化,隻是循環的級數固定了
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
JsonSerializer ser = JsonSerializer.Create(settings);
using (StringWriter sw = new StringWriter())
{
    ser.Serialize(sw, list);
    Console.WriteLine(sw.ToString());
}

           

解決方案2:使用Newtonsoft.Json中的方法注釋,在Json序列化的時候忽略關聯屬性

重點設定忽略方法注釋:

[JsonIgnore]
public virtual ICollection<score> scores { get; set; }
           

預設序列化的時候就會過濾掉Ignore的

//使用Newtonsoft 的序列化工具,可以設定忽略循環引用 方法3(推薦)
//本方法結合方法注釋 [JsonIgnore] ,就是在Json序列化的時候,忽略[JsonIgnore]指定的屬性
//這個方法相對比較常用
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();
string result = JsonConvert.SerializeObject(list);
Console.WriteLine(result);
           
//還可以顯示指定忽略
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
string result = JsonConvert.SerializeObject(list, settings);
Console.WriteLine(result);
           

更多:

解決MVC Json序列化的循環引用問題/EF Json序列化循引用問題---Newtonsoft.Json

繼續閱讀