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;
            }
  • 相关阅读:
    高级查询
    简单查询
    CRUD
    T-SQL语句
    数据库规范
    导出含有特定字符串的注册表
    .net、jquery、ajax、wcf实现数据库用户名检测局部刷新
    数据结构实验之二叉树二:遍历二叉树
    传纸条
    数据结构实验之栈与队列五:下一较大值(一)
  • 原文地址:https://www.cnblogs.com/guolihao/p/3214159.html
Copyright © 2011-2022 走看看