zoukankan      html  css  js  c++  java
  • EF webapi json序列化 表间相互引用 无限循环问题解决方案

    WebApiConfig.cs中加入 如下代码即可解决无限循环问题

                var json = config.Formatters.JsonFormatter;
                // 解决json序列化时的循环引用问题
                json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                // 干掉XML序列化器
                config.Formatters.Remove(config.Formatters.XmlFormatter);

    另外还有一个问题就是ef 如果用到 lazy加载的话, 输出的ef实体 会将关联表数据 都输出出来,解决方案是:

    1.将没用的字段置空

    2.用动态类型输出,例如: return  new{xx=user.userId,yy=...}

    3.将virtual属性标记为 忽略输出json(可通过ef tt模板实现)

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.Web;
    using System.Xml.Serialization;
    
    namespace CircularReferenceSample.Models
    {
        // Fix 3
        [JsonObject(IsReference = true)]
        public class Category
        {
            public int Id { get; set; }
            public string Name { get; set; }
    
            // Fix 3
            //[JsonIgnore]
            //[IgnoreDataMember]
            public virtual ICollection<Product> Products { get; set; }
        }
    
        [DataContract(IsReference = true)]
        public class Product
        {
            [Key]
            public int Id { get; set; }
    
            [DataMember]
            public string Name { get; set; }
    
            [DataMember]
            public virtual Category Category { get; set; }
        }
    }
  • 相关阅读:
    一些数据集
    经典的图像匹配算法----SIFT
    LDA处理文档主题分布代码
    Dirichlet Process
    主题模型-LDA浅析
    matplotlib —— 添加文本信息(text)
    xgboost原理及应用
    XGBoost参数调优
    MySQL中实现Oracle里面 rank()over ( PARTITION BY ORDER BY) 分类分组功能
    4.12 省选模拟赛 LCA on tree 树链剖分 树状数组 分析答案变化量
  • 原文地址:https://www.cnblogs.com/duanweishi/p/4363052.html
Copyright © 2011-2022 走看看