• 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; }
        }
    }
  • 相关阅读:
    wifi详解(四)
    wifi详解(三)
    wifi详解(二)
    wifi详解(一)
    Linux下GPIO驱动
    wpa_cli调试工具的使用
    WAPI
    java spring使用Jackson过滤
    JPA 一对多双向映射 结果对象相互迭代 造成堆栈溢出问题方法
    Javassist指引(二)--ClassPool
  • 原文地址:https://www.cnblogs.com/duanweishi/p/4363052.html
Copyright © 2020-2023  润新知