zoukankan      html  css  js  c++  java
  • 使用 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);
  • 相关阅读:
    完美立方数
    有进度条的圆周率计算
    用turtle库画童年的记忆哆啦A梦
    如何用Python画一朵太阳花
    2、4、pandas库修改excel文件内容,把excel格式存为csv格式,csv格式换为html
    python文件读写的读书笔记
    python画手绘图
    利用python把成绩用雷达图表示出来
    Numpy 和 Matplotlib库的学习笔记
    python 科学计算及数据可视化
  • 原文地址:https://www.cnblogs.com/zzqvq/p/5835403.html
Copyright © 2011-2022 走看看