• 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题


    先看一个T4模板生成的model实体类

     1 著作权归作者所有。
     2 商业转载请联系作者获得授权,非商业转载请注明出处。
     3 作者:卷猫
     4 链接:http://anneke.cn/ArticleInfo/Detial/15
     5 来源:Anneke.cn
     6 
     7 //------------------------------------------------------------------------------
     8 // <auto-generated>
     9 //     此代码已从模板生成。
    10 //
    11 //     手动更改此文件可能导致应用程序出现意外的行为。
    12 //     如果重新生成代码,将覆盖对此文件的手动更改。
    13 // </auto-generated>
    14 //------------------------------------------------------------------------------
    15  
    16 namespace MyBlog.Model
    17 {
    18     using Newtonsoft.Json;
    19     using System;
    20     using System.Collections.Generic;
    21     
    22     public partial class ArticleType
    23     {
    24         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    25         public ArticleType()
    26         {
    27             this.ArticleInfo = new HashSet<ArticleInfo>();
    28         }
    29     
    30         public int Id { get; set; }
    31         public string Title { get; set; }
    32         public int ParentId { get; set; }
    33     
    34         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    35         [JsonIgnore]
    36         public virtual ICollection<ArticleInfo> ArticleInfo { get; set; }
    37     }
    38 }

    这是一个文章分类实体,与文章实体,是一对多的关系(一个分类下可以有很多篇文章,而一个文章只有一个分类)

    这里有一个导航属性,我们控制器里将该对象序列化成json字符串的时候,会引起循环引用的问题。

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接:http://anneke.cn/ArticleInfo/Detial/15
    来源:Anneke.cn
    
    public virtual ICollection<ArticleInfo> ArticleInfo { get; set; }

    解决方法:我们使用Json.NET - Newtonsoft来进行序列化 首先为该导航属性加一个特性,该特性表示序列化的时候会忽略这个导航属性

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接:http://anneke.cn/ArticleInfo/Detial/15
    来源:Anneke.cn
    
    [JsonIgnore]
    public virtual ICollection<ArticleInfo> ArticleInfo { get; set; }

    然后就可以进行序列化操作了

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接:http://anneke.cn/ArticleInfo/Detial/15
    来源:Anneke.cn
    
    string json=JsonConvert.SerializeObject(articleType);
  • 相关阅读:
    微信网页授权登录(公众号)
    FastDFS:搭建文件管理系统
    第11章 分布式服务跟踪: Spring Cloud Sleuth
    第十章 消息驱动的微服务: Spring Cloud Stream
    第九章 消息总线: Spring Cloud Bus
    第八章 分布式配置中心:Spring Cloud Config
    体验Impress.js
    我擦,惊呆了惊呆了!!!微软这次推了个好东西啊
    化繁为简,无需后端。巧用Yql+rss,搭建我的个人网站
    PuTTY?Bash?Out了!!!终端应该这么玩~
  • 原文地址:https://www.cnblogs.com/zzqvq/p/5835403.html
Copyright © 2020-2023  润新知