zoukankan      html  css  js  c++  java
  • asp mvc 中重写JsonResult,解决Json返回值序列化问题

    1、先新建一个 JsonConvertResult:JsonResult,继承自JsonResult;

    public class JsonConvertResult : JsonResult
        {
            /// <summary>
            /// 格式化字符串
            /// </summary>
            public string FormateStr
            {
                get;
                set;
            }
    
            /// <summary>
            /// 重写执行视图
            /// </summary>
            /// <param name="context">上下文</param>
            public override void ExecuteResult(ControllerContext context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                HttpResponseBase response = context.HttpContext.Response;
    
                if (!string.IsNullOrEmpty(this.ContentType))
                {
                    response.ContentType = this.ContentType;
                }
                else
                {
                    response.ContentType = "application/json";
                    //response.setContentType("text/html;charset=utf-8");
                }
    
                if (this.ContentEncoding != null)
                {
                    response.ContentEncoding = this.ContentEncoding;
                }
    
                if (this.Data != null)
                {
    
                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    string jsonString = jss.Serialize(Data);
                    string p = @"\/Date((d+))\/";
                    MatchEvaluator matchEvaluator = new MatchEvaluator(this.ConvertJsonDateToDateString);
                    Regex reg = new Regex(p);
    
                    jsonString = reg.Replace(jsonString, matchEvaluator);
                    JsonSerializerSettings set = new JsonSerializerSettings();
                    set.NullValueHandling = NullValueHandling.Ignore;
    
                    //string jsonString = ExtJsonManager.SerializeObject(Data);
                    response.Write(jsonString);
                }
            }
    
            /// <summary>  
            /// 将Json序列化的时间由/Date(1294499956278)转为字符串 .
            /// </summary>  
            /// <param name="m">正则匹配</param>
            /// <returns>格式化后的字符串</returns>
            private string ConvertJsonDateToDateString(Match m)
            {
                string result = string.Empty;
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
                dt = dt.ToLocalTime();
                result = dt.ToString(FormateStr);
                return result;
            }
        }

    2、BaseController中重写Json返回值方法就可以了。

      protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
            {
                return new JsonConvertResult
                {
                    Data = data,
                    ContentType = contentType,
                    ContentEncoding = contentEncoding,
                    JsonRequestBehavior = behavior,
                    FormateStr = "yyyy-MM-dd HH:mm:ss"
                };
            }
  • 相关阅读:
    小程序排错(redis导致)
    linux系统删除-开头文件或目录
    nginx 反向代理
    memcache
    一次故障过程
    json.Decoder vs json.Unmarshal
    ssl中间证书
    作业10:String类
    Angular6如何引入jQuery-knob
    OpenJdk源码下载
  • 原文地址:https://www.cnblogs.com/tiggerinchengdu/p/4500157.html
Copyright © 2011-2022 走看看