zoukankan      html  css  js  c++  java
  • ASP.NET中JSON对时间进行序列化和反序列化

    JSON格式不直接支持日期和时间。DateTime值显示为“/Date(0+0800)/”形式的JSON字符串,其中第一个数字是GMT时区中自1970年1月1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。“+0800”的部分可选,它指示该时间属于Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。

    public static class JsonHelper
    {
        /// <summary>
        /// 生成Json格式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string JsonSerializer<T>(this T obj)
        {
            //JavaScriptSerializer serialize = new JavaScriptSerializer();
            //return serialize.Serialize(obj);
            var json = new DataContractJsonSerializer(obj.GetType());
            using (var stream = new MemoryStream())
            {
                json.WriteObject(stream, obj);
                string szJson = Encoding.UTF8.GetString(stream.ToArray());
    string p = @"\/Date((d+)+d+)\/"; MatchEvaluator evaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(p); szJson = reg.Replace(szJson, evaluator);
    return szJson; } } /// <summary> /// 获取Json的Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="szJson"></param> /// <returns></returns> public static T JsonDeserialize<T>(this string szJson) { string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}"; MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate); //对时间进行处理 Regex reg = new Regex(p); szJson = reg.Replace(szJson, evaluator);
    T obj
    = Activator.CreateInstance<T>(); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson))) { var serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } } /// <summary> /// 将Json时间转换成时间字符 /// </summary> private static 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("yyyy-MM-dd HH:mm:ss"); return result; } /// <summary> /// 将时间字符转换成JSON时间 /// </summary> private static string ConvertDateStringToJsonDate(Match m) { string result = string.Empty; DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); result = string.Format("\/Date({0}+0800)\/",ts.TotalMilliseconds); return result; } }
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/AngelLee2009/p/3394535.html
Copyright © 2011-2022 走看看