马会东的博客

马会东的博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

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; }
    }
}

 

posted on 2015-03-24 15:53  马会东  阅读(820)  评论(0编辑  收藏  举报