JavaScriptSerializer 序列化json 时间格式-收集
2013-05-30 17:17
176 查看
Model m =
new
Model { Id = 1, Dt = DateTime.Now };
分类:
2011-01-26 11:13
2192人阅读 评论(0)
收藏
举报
jsonstringregex正则表达式datejavascript
JSON格式不直接支持日期和时间。DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字(在提供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于Local类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。
修改Person类,添加LastLoginTime:
[c-sharp]
view plaincopyprint?
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime LastLoginTime { get; set; }
}
[c-sharp] view plaincopyprint? Person p = new Person(); p.Name = "张三"; p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer<Person>(p); Person p = new Person(); p.Name = "张三"; p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer<Person>(p);
序列化结果:
{"Age":28,"LastLoginTime":"//Date(1294499956278+0800)//","Name":"张三"}
1 、在后台使用正则表达式对其替换处理。修改JsonHelper:
[c-sharp]
view plaincopyprint?
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;
}
}
[c-sharp] view plaincopyprint? Person p = new Person(); p.Name = "张三"; p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer<Person>(p); Person p = new Person(); p.Name = "张三"; p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer<Person>(p);
运行结果:
{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":"张三"}
反序列化Demo:
string json = "{/"Age/":28,/"LastLoginTime/":/"2011-01-09 00:30:00/",/"Name/":/"张三/"}";
p=JsonHelper.JsonDeserialize<Person>(json);
运行结果:
在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。
2、利用JavaScript处理
[javascript]
view plaincopyprint?
function ChangeDateFormat(jsondate) {
jsondate = jsondate.replace("/Date(", "").replace(")/", "");
if (jsondate.indexOf("+") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("+"));
}
else if (jsondate.indexOf("-") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("-"));
}
var date = new Date(parseInt(jsondate, 10));
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return date.getFullYear() + "-" + month + "-" + currentDate;
}
function ChangeDateFormat(jsondate) {
jsondate = jsondate.replace("/Date(", "").replace(")/", "");
if (jsondate.indexOf("+") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("+"));
}
else if (jsondate.indexOf("-") > 0) {
jsondate = jsondate.substring(0, jsondate.indexOf("-"));
}
var date = new Date(parseInt(jsondate, 10));
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return date.getFullYear() + "-" + month + "-" + currentDate;
}
简单Demo :
ChangeDateFormat("//Date(1294499956278+0800)//");
结果:
2011-1-8
相关文章推荐
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
- Newtonsoft.Json 序列化和反序列化 时间格式
- JavaScriptSerializer 序列化json 时间格式
- Newtonsoft.Json 序列化和反序列化 时间格式
- Json.net动态序列化以及对时间格式的处理
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
- 转载自——Json.net动态序列化以及对时间格式的处理
- .NET 自定义Json序列化时间格式
- JavaScriptSerializer 序列化json 时间格式
- JavaScriptSerializer 序列化json 时间格式
- JSON 序列化和反序列化:将时间由"//Date(10000000000-0700)//" 格式转换成 "yyyy-MM-dd HH:mm:ss" 格式的字符串
- Newtonsoft.Json 序列化和反序列化 时间格式
- JavaScriptSerializer 序列化json 时间格式
- Newtonsoft.Json同时对多个时间字段以不同的格式序列化
- Newtonsoft.Json 序列化和反序列化 以及时间格式
- Spring AMQP 发送JSON格式的对象及Java 8时间转换成JSON格式
- 【FCL】将实体类序列化为xml,Json等格式
- Jquery 组合form元素为json格式,asp.net反序列化