我使用JavaScriptSerializer.Deserialize<>()方法将从客户端接收的JSON转换为自定义的C#类。该类的一个属性是DateTime。当前,Deserialize<>()方法抛出一个错误,该方法表示
“(我的日期字符串)”不是DateTime的有效值。
我尝试使用几种不同的格式发送日期,包括由各种内置的JavaScript Date()方法生成的滴答号和其他格式,但这些格式都没有工作。
Deserialize<>()方法究竟需要什么样的格式才能将其解析为.NET DateTime
发布于 2013-04-09 17:10:36
“你说得对,”友谊大提琴说。不幸的是,JSON.stringify()从\/Date(ticks)\/ .Net序列化程序DateTime格式中删除反斜杠。
我编写了一个自定义函数来调整来自JSON.stringify()的输出,包括这些反斜杠。因此,我几乎可以保持未打开的状态,只需从JSON.stringify()替换到customJSONstringify()中的$.ajax()数据: param。
function customJSONstringify(obj) {
return JSON.stringify(obj).replace(/\/Date/g, "\\\/Date").replace(/\)\//g, "\)\\\/")
}发布于 2015-10-26 19:46:41
爱德华多在JavaScript方面提供了一个解决方案。您还可以选择纠正服务器端的问题。
// C# Side
var obj = Regex.Replace(json, @"/Date\((\-?\d*)\)/", @"\/Date($1)\/")请注意,我使用了一个替换。这比使用两个replace()更安全、更准确。相同的表达式可用于替换JavaScript示例中的表达式。
// Safer version of function using a single replace
function customJSONstringify(obj) {
return JSON.stringify(obj).replace(/\/Date\((\-?\d*)\)\//g, "\\/Date($1)\\/");
}两个对replace()的调用可能导致第二个替换替换与数据无关的文本。注意,为了更安全,表达式可以更新为只替换前面有一个单引号的/Date(.\*)/实例。这将确保如果有描述/Date(.\*)/语法的文本,它就不会被替换。
发布于 2012-08-07 20:02:16
算出了--它在\/Date(ticks)\/格式下工作。
注意:如果使用JSON.stringify创建请求,它将自动转义反斜杠,从而导致服务器端出现解析错误。我发现这样做的唯一方法是将\\的所有实例替换为服务器端的\。
https://stackoverflow.com/questions/11852432
复制相似问题