将带有JSON的日期传递给.NET

Ste*_*ven 7 .net asp.net-mvc jquery json

这是我的jQuery代码:

function onSaveClicked()
{
    var message = 
    {
        MessageID: $("#MessageID").val() || 0,
        MessageDate: "\/Date(<%= DateTime.Now.Ticks %>)\/",
    };


    $.ajax({
       url: "<%= Url.Action("SaveMessage") %>",
       type: "POST",
       dataType: "json",
       data: $.toJSON(message),
       contentType: "application/json; charset=utf-8",
       success: function(result) {
            if (result && result.success)
            {
                //
            }
       }
   }); 
}
Run Code Online (Sandbox Code Playgroud)

起初,我只是将MessageDate设置为一个日期格式的字符串,但是在出现一些错误之后,我做了一些研究,看起来我需要传入Ticks.但是我收到以下错误:

反序列化Models.MessageModel类型的对象时出错.无法将值"634185025866884281"解析为"DateTime"类型

我也尝试过:

MessageDate: "\\/Date(<%= DateTime.Now.Ticks %>)\\/",
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

反序列化Models.MessageModel类型的对象时出错.日期时间内容'/日期(634185027273624742)/'不以'/ Date('和以')结尾,以及JSON所需的.

为了让这个工作,我需要做什么?

编辑:我正在使用它来反序列化JSON请求:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
    {
        var serializer = new DataContractJsonSerializer(RootType);
        //RootType here is (Name = "MessageModel", FullName="Models.MessageModel")

        filterContext.ActionParameters["message"] = serializer.ReadObject(filterContext.HttpContext.Request.InputStream);


    }
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 2

您可以尝试以下功能:

public static string FormatDate(DateTime dt)
{
    var serializer = new DataContractJsonSerializer(typeof(DateTime));
    using (var stream = new MemoryStream())
    {
        serializer.WriteObject(stream, dt);
        return Encoding.Default.GetString(stream.ToArray());
    }
} 
Run Code Online (Sandbox Code Playgroud)

而在你看来:

var message = 
{
    MessageID: $("#MessageID").val() || 0,
    MessageDate: "/Date(<%= SomeClass.FormatDate(DateTime.Now) %>)/"
};
Run Code Online (Sandbox Code Playgroud)