JavaScriptSerializer 序列化json 时间格式

ljyabc1028 2011-08-17 05:14:34
以下是代码:
实体
public class jsonmm

{
public string Name { get; set; }

public int Age { get; set; }
//[ScriptIgnore]
public DateTime LastLoginTime { get; set; }

}
方法:
public string ScriptSerialize<T>(T t)
{

JavaScriptSerializer js = new JavaScriptSerializer();

return js.Serialize(t);

}
页面测试:
Code.json pp = new Code.json();
Code.jsonmm p = new Code.jsonmm();

p.Name = "张三";

p.Age = 28;

p.LastLoginTime = DateTime.Now.ToUniversalTime();
string jsonString = pp.ScriptSerialize<Code.jsonmm>(p);
Response.Write(jsonString);

时间已经转换为utc格式了,可还是得出这样的数据
{"Name":"张三","Age":28,"LastLoginTime":"\/Date(1313572554031)\/"}
怎么修改呢
...全文
1775 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gis_Dolphin 2013-09-02
  • 打赏
  • 举报
回复
感谢三楼,方法非常有效!
yannanfeiff 2013-04-14
  • 打赏
  • 举报
回复
[quote=引用 2 楼 tomysea 的回复:] 我试过了,很好用
liuyijunjava2 2012-05-23
  • 打赏
  • 举报
回复
感谢3楼的盆友
zhaocong94005 2011-11-15
  • 打赏
  • 举报
回复
该童鞋要的是解决方法 你说的是什么、
  • 打赏
  • 举报
回复
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 启用)始终会对“/”字符进行转义。
  • 打赏
  • 举报
回复
给你抄一段msdn中的文字:
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 启用)始终会对“/”字符进行转义。


具体内容,请搜索msdn。
  • 打赏
  • 举报
回复
那个格式是正确的。你应该使用json序列化/反序列化方法来处理,不要自己手工解析字符串。
huangwenquan123 2011-08-17
  • 打赏
  • 举报
回复

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"}
tomysea 2011-08-17
  • 打赏
  • 举报
回复
那种时间格式是json的标准时间格式

你也可以在C#自定义类型解析器,继承自System.Web.Script.Serialization.SimpleTypeResolver,来自己解析时间类型,你可以在网搜索一下
tomysea 2011-08-17
  • 打赏
  • 举报
回复
JavaScriptSerializer的行为是这样的,你可以在客户端再处理一下


var json = { "Name": "张三", "Age": 28, "LastLoginTime": "\/Date(1313572554031)\/" };
//把/删除,并转换为正确的javascript时间
json.LastLoginTime = eval('new ' + (json.LastLoginTime.replace(/\//g, '')));
alert(json.LastLoginTime);

62,053

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧