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);
  • 相关阅读:
    MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除
    Eclipse常用快捷键
    UDP 通信
    HDU 3571 N-dimensional Sphere(高斯消元 数论题)
    【机器学习】SVM核函数
    获取CentOS软件源中的updates包
    13年7月13日CF练习 Codeforces Round #147 (Div. 2)
    VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
    .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。
    庖丁图解八皇后问题
  • 原文地址:https://www.cnblogs.com/zzqvq/p/5835403.html
Copyright © 2011-2022 走看看