首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从客户端使用.NET JavaScriptSerializer.Deserialize和DateTime

从客户端使用.NET JavaScriptSerializer.Deserialize和DateTime
EN

Stack Overflow用户
提问于 2012-08-07 19:04:25
回答 5查看 9.2K关注 0票数 7

我使用JavaScriptSerializer.Deserialize<>()方法将从客户端接收的JSON转换为自定义的C#类。该类的一个属性是DateTime。当前,Deserialize<>()方法抛出一个错误,该方法表示

“(我的日期字符串)”不是DateTime的有效值。

我尝试使用几种不同的格式发送日期,包括由各种内置的JavaScript Date()方法生成的滴答号和其他格式,但这些格式都没有工作。

Deserialize<>()方法究竟需要什么样的格式才能将其解析为.NET DateTime

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-09 17:10:36

“你说得对,”友谊大提琴说。不幸的是,JSON.stringify()\/Date(ticks)\/ .Net序列化程序DateTime格式中删除反斜杠。

我编写了一个自定义函数来调整来自JSON.stringify()的输出,包括这些反斜杠。因此,我几乎可以保持未打开的状态,只需从JSON.stringify()替换到customJSONstringify()中的$.ajax()数据: param。

代码语言:javascript
复制
function customJSONstringify(obj) {
    return JSON.stringify(obj).replace(/\/Date/g, "\\\/Date").replace(/\)\//g, "\)\\\/")
}
票数 8
EN

Stack Overflow用户

发布于 2015-10-26 19:46:41

爱德华多在JavaScript方面提供了一个解决方案。您还可以选择纠正服务器端的问题。

代码语言:javascript
复制
// C# Side
var obj = Regex.Replace(json, @"/Date\((\-?\d*)\)/", @"\/Date($1)\/")

请注意,我使用了一个替换。这比使用两个replace()更安全、更准确。相同的表达式可用于替换JavaScript示例中的表达式。

代码语言: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(.\*)/语法的文本,它就不会被替换。

票数 3
EN

Stack Overflow用户

发布于 2012-08-07 20:02:16

算出了--它在\/Date(ticks)\/格式下工作。

注意:如果使用JSON.stringify创建请求,它将自动转义反斜杠,从而导致服务器端出现解析错误。我发现这样做的唯一方法是将\\的所有实例替换为服务器端的\

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11852432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档