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;
            }
  • 相关阅读:
    深入浅出JSONP--解决ajax跨域问题
    Apache与Tomcat的区别
    项目终于接近尾声了
    交互设计[小插曲]--网站UI配色
    使用 Jasmine 进行测试驱动的 JavaScript 开发
    javascript单元测试
    MySQL查询当前数据库中所有记录不为空的表
    cannot be resolved to a type的错误
    oracle 表空数据导出dmp ,空表导出失败
    Iterable<E> Iterator<E>
  • 原文地址:https://www.cnblogs.com/guolihao/p/3214159.html
Copyright © 2011-2022 走看看