Json .net设置相当于JavaScriptSerializer默认的日期



我正在使用JQuery Ganntt插件,它需要以Unix纪元格式格式化日期。使用Newtonsoft的Json。

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
return JsonConvert.SerializeObject(headers, microsoftDateFormatSettings);

我得到的json如下所示

[{"desc":"统计","名字":"状态","值":[{"到":"/日期(1357483427000 - 0500)","从":"/日期(1354891427000 - 0500)"、"desc":","标签":"实现","customClass":"ganttBlue"、"dataObj":{" id ": 35岁"projectId":18705年,"updatedById":437996年,"updatedByName":"琳达","更新":"/日期(1354891427000 - 0500)"、"statusId":160年,"statusDescription":","状态":"实现"}}]},{"desc":"ASGNTO"、"名称":"分配"、"价值观":[{"到":"/日期(1357762454000 - 0500)","从":"/日期(1355170454000 - 0500)"、"desc":"苏西"、"标签":"苏西"、"customClass":"ganttRed"、"dataObj":{" id ": 55,"projectId":18705年,"updatedById":719816年,"updatedByName":"乔","更新":"/日期(1355170454000 - 0500)"、"assignedToId":561260年,"assignedToName":Suzy}}]}]

gantt插件不喜欢带有-500的日期。它需要这个,这是通过使用JavaScriptSerializer

生成的

"[{"desc ","统计","","","价值观":[{"","/日期(1357483427000)/","","/日期(1354891427000)/","描述 ":""," 标签 ": "实现","customClass ": " ganttBlue ","dataObj ":{ "Id":35岁,"ProjectId ":18705年,"UpdatedById ":437996年,"UpdatedByName ","琳达","更新":"/日期(1354891427000)/","StatusId ":160年,StatusDescription " ":""," 地位":"实现 "}}]},{" desc ","ASGNTO "," ": "指定名称 ","值":[{"","/日期(1357762454000)/","","/日期(1355170454000)/",""描述:"苏西","标签":"苏西","customClass ","ganttRed ","dataObj ":{ "Id":55岁,"ProjectId ":18705年,"UpdatedById ":719816年,"UpdatedByName ","乔","更新":"/日期(1355170454000)/","AssignedToId ":561260年,"AssignedToName ","苏西 "}}]}]"

Json的正确设置是什么?净转换器吗?当我们迁移到。net 4.5时,我想使用Json.net

要使其显示与JavaScriptSerializer产生的日期相似的日期,您必须给出两个设置:

JsonSerializerSettings serializerSettings = new JsonSerializerSettings()
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};

使用任何其他类型的DateTimeZoneHandling都将导致输入时区偏移量。(似乎是一个bug, Unspecified仍然把偏移量。)

但是,如果您在整个系统中使用本地时间,那么在序列化它们时,这样做将使日期按您的时区偏移量移动。你的约会会取消。

对我来说最简单的修复是使用默认的ISO日期,将DateTimeZoneHandling设置为Local,并更改客户端以解析ISO日期。否则,您需要在序列化之前调整日期,或者使用您自己的自定义序列化器。

最新更新