日期:2014-05-17 浏览次数:20480 次
var json = { "Name": "张三", "Age": 28, "LastLoginTime": "\/Date(1313572554031)\/" }; //把/删除,并转换为正确的javascript时间 json.LastLoginTime = eval('new ' + (json.LastLoginTime.replace(/\//g, ''))); alert(json.LastLoginTime);
------解决方案--------------------
那种时间格式是json的标准时间格式
你也可以在C#自定义类型解析器,继承自System.Web.Script.Serialization.SimpleTypeResolver,来自己解析时间类型,你可以在网搜索一下
------解决方案--------------------
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"}
------解决方案--------------------
那个格式是正确的。你应该使用json序列化/反序列化方法来处理,不要自己手工解析字符串。
------解决方案--------------------
DateTime 连网格式
DateTime 值显示为“/Date(700000+0500)/”形式的 JSON 字符串,其中第一个数字(在提供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于 Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为 Utc。实际数字(本示例中为“0500”)及其符号(+ 或 -)将被忽略。
序列化 DateTime 时,写入的 Local 和 Unspecified 时间将带有偏移量,而写入的 Utc 则不带偏移量。
ASP.NET AJAX 客户端 JavaScript 代码会自动将此类字符串转换为 JavaScript DateTime 实例。如果有其他字符串采用了类似的形式,则即使它们不属于 .NET 中的 DateTime 类型,也会对它们执行转换。
只有“/”字符为转义字符(即 JSON 的形式类似于“\/Date(700000+0500)\/”)时,才会进行转换,因此 WCF 的 JSON 编码器(由 WebHttpBinding 启用)始终会对“/”字符进行转义。