我正在使用JQuery Ganntt插件,它需要以Unix纪元格式格式化的日期。使用Newtonsoft的Json.Net进行这些设置
JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
return JsonConvert.SerializeObject(headers, microsoftDateFormatSettings);
我得到的json看起来像下面的
[{ “desc” 的: “STAT”, “姓名”: “状态”, “值”:[{ “到”: “/日期(1357483427000-0500)/”, “从”:“/日期( 1354891427000-0500)/”, “降序”: “”, “标签”: “实施”, “customClass”: “ganttBlue”, “dataObj”:{ “ID”:35, “专案编号”:18705 “updatedById” :437996 “updatedByName”: “琳达”, “更新”: “/日期(1354891427000-0500)/”, “statusId”:160, “状态说明”: “”, “状态”: “实现”}}]} ,{“desc”:“ASGNTO”,“name”:“Assigned To”,“values”:[{“to”:“/ Date(1357762454000-0500)/”,“from”:“/ Date(1355170454000-) 0500)/”, “降序”: “苏西”, “标签”: “苏西”, “customClass”: “ganttRed”, “dataObj”:{ “ID”:55, “专案编号”:18705 “updatedById”: 719816, “updatedByName”: “乔”, “更新”: “/日期(1355170454000-0500)/”, “assignedToId”:561260 “assignedToName”: “苏西”}}]}]
gantt插件不喜欢-500的日期。它想要这个,这是使用JavaScriptSerializer生成的
“[{\” DESC \ “:\” STAT \ “\ ”名称\“:\ ”状态\“,\ ”值\“:[{\ ”到\“:\” \ /日期( 1357483427000)\ / \”,\ “从\”:\ “\ /日期(1354891427000)\ / \”,\ “描述\”:\ “\” \ “标签\”:\ “实现\”,\ “customClass \”:\ “ganttBlue \”,\ “dataObj \”:{\ “ID \”:35,\ “专案编号\”:18705,\ “UpdatedById \”:437996,\ “UpdatedByName \”:\”琳达\ “\ ”更新\“:\ ”\ /日期(1354891427000)\ / \“,\ ”StatusId \“:160,\ ”状态说明\“:\ ”\“ \ ”状态\“:\”实现\“}}]},{\”desc \“:\”ASGNTO \“,\”name \“:\”Assigned To \“,\”values \“:[{\”to \“:\” \ /日期(1357762454000)\ / \ “\ ”从\“:\ ”\ /日期(1355170454000)\ / \“,\ ”描述\“:\ ”苏西\“ \ ”标签\“:\”苏西\ “\ ”customClass \“:\ ”ganttRed \“,\ ”dataObj \“:{\ ”ID \“:55 \ ”专案编号\“:18705,\ ”UpdatedById \“:719816,\” UpdatedByName \ “:\” 乔\”,\ “更新\”:\ “\ /日期(1355170454000)\ / \”,\ “AssignedToId \”:561260,\ “AssignedToName \”:\ “苏西\”}}] }]“
Json.Net转换器的正确设置是什么?当我们转移到.net 4.5时,我想使用Json.net。
答案 0 :(得分:1)
要使其显示与JavaScriptSerializer
生成的日期类似的日期,您必须提供两个设置:
JsonSerializerSettings serializerSettings = new JsonSerializerSettings()
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
使用任何其他类型的DateTimeZoneHandling
将导致时区偏移量被放入。(看起来像Unspecified
仍然将偏移量放入的错误。)
但是,如果您在整个系统中使用本地时间,那么在序列化时,执行此操作会将日期偏移时区偏移量。你的约会对象。
对我来说最简单的解决方法是使用默认的ISO日期,将DateTimeZoneHandling
设置为Local
,然后更改客户端以解析ISO日期。否则,您需要在序列化或使用自己的自定义序列化程序之前调整日期。最后两个似乎都不值得我。