ASP.NET的Json序列化程序吐出" /日期(1240718400000)/"对于DateTime。在我的Knockout viewmodel(使用getJson和knockout mapper)中,我曾经用一个可写的计算器处理这个问题,将其转换为实际的javascript日期并返回。
但是,我对此解决方案并不满意,因为它太过混乱了我的视图模型。
我决定使用Json.NET和它的JavaScriptDateTimeConverter,它给了我Date(1240718400000)。理论上这很棒,因为它会给我带来真正的javascript日期的可观察性。
在实践中,我无法让它发挥作用:(
我知道这是无效的Json,似乎jQuery使用的内部Json解析器,不接受这个。
有没有办法让jQuery getJson与Json.NET JavaScriptDateTimeConverter一起工作?
答案 0 :(得分:2)
我决定采用这种方法:
我的viewmodel在DateTime属性上有JavaScriptDateTimeConverter
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime TheEndOfTheWorld { get; set; }
我的控制器返回JsonNetResult
return new JsonNetResult()
{
Data = new MayaCalendar();
};
最后,我的javascript将其解析为
$.ajax({
url: "/Calendars/Maya",
dataType: "text",
}).done(function (data) {
var json = eval("(" + data + ")");
var viewmodel = new WeirdCalendarViewModel(json);
ko.applyBindings(viewmodel);
});
简而言之:
我使用JavaScriptDateTimeConverter返回一个无效的JSON字符串,其中包含新日期(7919938800000)而不是" / Date(7919938800000)/"
我用$ .ajax,dataType" text"调用方法所以jQuery不会尝试解析无效的JSON
在将对象传递给我的淘汰视图模型之前,我使用eval()自行解析。
午餐
临:
缺点:
答案 1 :(得分:0)
使用此函数将日期从json格式转换为javascript日期
答案 2 :(得分:0)
你可以在Json.NET中序列化以使用
获得相同的日期格式JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
JsonConvert.SerializeObject(yourDataClass, microsoftDateFormatSettings);
我认为从这开始,只是一小步 而不是继续其他变化。
答案 3 :(得分:0)
这是一个excellent article,它提供了处理JSON日期的全局解决方案。它只处理ISO和.NET(/DATE(...)/)格式,但也可以轻松修改以处理JavaScriptDateTimeConverter的新Date(...)格式。
该解决方案通过覆盖jquery的parseJSON方法实现此目的,同时保持向后兼容性。很酷。