zoukankan      html  css  js  c++  java
  • 自定义JsonResult解决 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

    接上篇的问题,给出我自己的解决方案。

    同时推荐要学习MVC的可以参考下《ASP.NET MVC4 框架揭秘》。

    首先,要自定义JSonResult,就要明白MVC中 JsonResult的定义。源码要自己查了,这里就不罗嗦了。

    有一点要知道的就是MVC中的JsonResult是通过JavascriptSerializer(System.Web.Scripts.Serialization.JavaScripteSerializer,要添加System.Web.Extensions.dll)来实现Json序列化和方序列化的。

    现在我们要做的就是改变JsonResult序列化Json的方式,改用Json.net,利用Json.net的JsonIgnoreAttribute可以排除掉不用序列话的成员,思想和上篇中第一个解决方案一样,只要需要的字段。

    上代码

        public class CustomJsonResult : JsonResult
        {
            public override void ExecuteResult(ControllerContext context)
            {
    
                if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Compare(context.HttpContext.Request.HttpMethod, "Get", true) == 0)
                {
                    throw new InvalidOperationException();
                }
                HttpResponseBase response = context.HttpContext.Response;
                response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
                if (this.ContentEncoding != null)
                {
                    response.ContentEncoding = this.ContentEncoding;
                }
                if (null != this.Data)
                {
                   response.Write(JsonConvert.SerializeObject(this.Data));
                }
            }
        }
           public JsonResult GetColleges()
            {
                List<Models.CollegeInfoModel> list = collegeObj.GetAllModel();
                string data = Common.JsonConverter.List2Json<CollegeInfoModel>(list);
                Common.CustomJsonResult jr = new Common.CustomJsonResult();
                jr.Data = list;// Common.JsonConverter.Json2List<CollegeInfoModel>(data);
                jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                jr.ContentType = "application/json";
                jr.ContentEncoding = System.Text.Encoding.UTF8;
                
                return jr;
            }
  • 相关阅读:
    Vscode开发工具中的Simple React Snippets插件,对React开发有哪些便捷
    函数防抖和节流
    4.怎么样用CSS实现一个loading效果
    3.常见清除浮动的
    2.css处理各种溢出
    1. css画三角形
    2.javascript中call()和apply()区别
    1.js的继承的实现方法
    css、js小技巧
    JS函数声明和函数表达式的关系
  • 原文地址:https://www.cnblogs.com/guolihao/p/3214159.html
Copyright © 2011-2022 走看看