这是我的 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)
{
//
}
}
});
}
起初,我只是将 MessageDate 设置为日期格式的字符串,但是在出现一些错误之后,我做了一些研究,看起来我需要传递 Ticks。但我收到以下错误:
反序列化 Models.MessageModel 类型的对象时出错。值“634185025866884281”无法解析为“DateTime”类型
我也尝试过:
MessageDate: "\\/Date(<%= DateTime.Now.Ticks %>)\\/",
但我收到此错误消息:
反序列化 Models.MessageModel 类型的对象时出错。 DateTime 内容“/Date(634185027273624742)/”未按照 JSON 的要求以“/Date(”开头并以“)/”结尾。
我需要做什么才能使其正常工作?
编辑: 我用它来反序列化 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);
}
}
最佳答案
您可以尝试以下功能:
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());
}
}
在您看来:
var message =
{
MessageID: $("#MessageID").val() || 0,
MessageDate: "/Date(<%= SomeClass.FormatDate(DateTime.Now) %>)/"
};
关于.net - 使用 JSON 将日期传递到 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585348/