zoukankan      html  css  js  c++  java
  • EntityFramework中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);  

     

  • 相关阅读:
    Codeforces Round #350 (Div. 2) F. Restore a Number 模拟
    Codeforces Round #374 (Div. 2) C. Journey DP
    Codeforces Round #375 (Div. 2) D. Lakes in Berland DFS
    Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D. Generating Sets 堆
    Ubuntu 安装 搜狗输入法
    Ubuntu 搜索不到WIFI或连接不上的解决方法
    Ubuntu 线缆被拔出问题
    Codeforces Round #357 (Div. 2) D. Gifts by the List DFS
    Codeforces Round #357 (Div. 2) C. Heap Operations 优先队列
    Codeforces Round #356 (Div. 2) C. Bear and Prime 100 交互题
  • 原文地址:https://www.cnblogs.com/yanglang/p/9363110.html
Copyright © 2011-2022 走看看