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; }
        }
    }
  • 相关阅读:
    Java的常用API之System类简介
    Java的常用API之Date类简介
    Java的常用API之Object类简介
    数据库知识总结(全)
    学习:浏览器访问网站的总流程
    学习:TCP/UDP协议分析(TCP四次挥手)
    学习:TCP/UDP协议分析(TCP三次握手)
    学习:ICMP协议
    实现:ARP探测存活主机
    学习:ARP协议/数据包分析
  • 原文地址:https://www.cnblogs.com/duanweishi/p/4363052.html
Copyright © 2011-2022 走看看