• JavaScriptSerializer 序列化json 时间格式



     利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换

    1.利用字符串直接替换

    Model m = new Model { Id = 1, Dt = DateTime.Now };
            JavaScriptSerializer js = new JavaScriptSerializer();
            string str = js.Serialize(m);
            str = Regex.Replace(str, @"\/Date((d+))\/", match => 
            {
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
                dt = dt.ToLocalTime();
               return dt.ToString("yyyy-MM-dd HH:mm:ss");
            });
            Response.Write(str);
    //{"Id":1,"Dt":"2011-08-17 17:38:47"} 

    2.JsonHelper

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;   
    using System.Runtime.Serialization.Json;   
    using System.IO;   
    using System.Text;   
    using System.Text.RegularExpressions;   
    /// <summary>  
    /// JSON序列化和反序列化辅助类  
    /// </summary>  
    public class JsonHelper  
    {  
         /// <summary>  
        /// JSON序列化  
        /// </summary>  
         public static string JsonSerializer<T>(T t)  
         {  
             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
             MemoryStream ms = new MemoryStream();  
            ser.WriteObject(ms, t);  
             string jsonString = Encoding.UTF8.GetString(ms.ToArray());  
             ms.Close();  
             //替换Json的Date字符串  
             string p = @"///Date/((/d+)/+/d+/)///"; /*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/
             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
              Regex reg = new Regex(p);  
             jsonString = reg.Replace(jsonString, matchEvaluator);  
             return jsonString;  
         }  
         /// <summary>  
         /// JSON反序列化  
         /// </summary>  
         public static T JsonDeserialize<T>(string jsonString)  
         {  
             //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式  
             string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";  
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  
            Regex reg = new Regex(p);  
             jsonString = reg.Replace(jsonString, matchEvaluator);  
             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
             T obj = (T)ser.ReadObject(ms);  
             return obj;  
         }  
        
         /// <summary>  
         /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串  
         /// </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;  
        }  
     }

    List<T>序列化:

     1: List<Person> list = new List<Person>()
       2: {
       3:     new Person(){ Name="张三", Age=28},
       4:     new Person(){ Name="李四", Age=25}
       5: };
       6:  
       7: string jsonString = JsonHelper.JsonSerializer<List<Person>>(list);
    

    序列化结果:

    "[{/"Age/":28,/"Name/":/"张三/"},{/"Age/":25,/"Name/":/"李四/"}]"

        字典不能直接用于JSON,Dictionary字典转化为JSON并不是跟原来的字典格式一致,而是形式以Dictionary的Key作为名称”Key“的值,以Dictionary的Value作为名称为”Value“的值 。如:

       1: Dictionary<string, string> dic = new Dictionary<string, string>();
       2: dic.Add("Name", "张三");
       3: dic.Add("Age", "28");
       4:  
       5: string jsonString = JsonHelper.JsonSerializer < Dictionary<string, string>>(dic);

          序列化结果:

       1: "[{/"Key/":/"Name/",/"Value/":/"张三/"},{/"Key/":/"Age/",/"Value/":/"28/"}]"
  • 相关阅读:
    Java基础01
    架构漫谈阅读笔记1
    机器学习-分类算法之k-近邻
    机器学习-模型选择
    机器学习-scikit-learn数据集
    机器学习-特征选择
    机器学习-数据的特征预处理
    实现模式阅读笔记二
    实现模式阅读笔记一
    《架构之美》阅读笔记七
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/3783738.html
Copyright © 2020-2023  润新知