在使用JSON格式数据响应Ajax请求的时候一般都使用JavaScriptSerializer类的一个实例方法:Serialize(object obj),但是这个方法在序列化日期类型数据的时候是将DateTime类型的数据序列化为形如这种字符串格式的日期:"/Date(1342822827000)/",前端的js获得数据后还需要进一步处理,将其转换成我们能看得懂的时间格式,如:2013年1月14日 19:49:24
客户端的处理方式:
function DateTimeFormat(strUtc) {
// 参数: /Date(1342822827000)/
//(eval(value.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"))).pattern("yyyy-M-d h:m:s.S"); 这需要引用一个外部js文件
return new Date(parseInt(strUtc.replace(/\/Date\((\d+)\)\//gi, "$1"))).toLocaleString();
}
实现思路:将字符串"/Date(1342822827000)/ "中括号中的数字部分提取出来,然后将其转化成number类型,再传如Date构造函数创建一个Date类型的对象,再调用.toLocaleString()函数转换成字符串返回;
服务器端的处理方式:
//实现一个继承自JavaScriptConverter的类
public class UTCDateTimeConverter:JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DateTime dt=(DateTime)obj;
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("value",dt.ToString("yyyy-MM-dd"));
return dic;
}
public override IEnumerable<Type> SupportedTypes
{
get {
return new List<Type> { typeof(DateTime) }.AsEnumerable<Type>();
}
}
}
//注册一个转换器
JavaScriptSerializer jss = new JavaScriptSerializer();
List<HKCorpData.Common.UTCDateTimeConverter> listConverter = new List<HKCorpData.Common.UTCDateTimeConverter>();
listConverter.Add(new HKCorpData.Common.UTCDateTimeConverter());
jss.RegisterConverters(listConverter);
//序列化
jss.Serialize(list) 如果list对象中包含DateTime类型的成员,则在序列化的时候将输出我们注册的转换器定义的格式:
yyyy-MM-dd,而不是默认的UTC时间格式:
/Date(1342822827000)/