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/"}]"
本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/3783738.html如需转载请自行联系原作者

欢醉
相关文章
|
4天前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
19 1
|
4天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
5天前
|
JSON JavaScript 前端开发
|
14天前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
1月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
63 2
|
25天前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
1月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
22 0
|
1月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
327 0
|
2月前
|
JSON 数据格式 Python
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
下一篇
无影云桌面