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;
            }
  • 相关阅读:
    第十二节:类的定义
    第十二节:类的定义
    第十二节:类的定义
    Android核心技术Intent和数据存储篇
    Android核心技术Intent和数据存储篇
    Android核心技术Intent和数据存储篇
    ObjectDataSource配置数据源的时候,选择业务对象下拉菜单没有任何东西
    两个时间相差多少 .net中的timespan应用
    net3:DropDownList的动态绑定
    ADO:DataSet存入缓存Cache中并使用
  • 原文地址:https://www.cnblogs.com/guolihao/p/3214159.html
Copyright © 2011-2022 走看看