【发布时间】:2019-02-20 04:38:42
【问题描述】:
我有一段代码将 JSON 对象序列化为 MVC C# 控制器中的字符串。然后我需要使用这个序列化的 JSON 在前端设置 JavaScript var 的值。
当我尝试将其反序列化回 JSON 对象时,我注意到 JSON.parse 不断中断。经过进一步检查,字符串本身似乎包含换行符(例如 \n、\r)。但是,如果我尝试删除它,代码会显示新行不存在。
这是我尝试过的一些事情:
-
console.log(object.toString().indexOf("\r"));= 这将返回 -1。 \n、\r\n、\t 和 \f 相同
-
console.log(object.toString().indexOf("\\r"));= 同上,加双反斜杠以防万一遗漏。 -
console.log(object.replace(/[\t\r\n\f]/gm, "")); = string 仍然使用相同的字符串输出,包括所有随机换行符。如果我的正则表达式有误,请纠正我。 - 通过显示字符串中隐藏字符 (http://show-hidden-characters.dostring.com/) 的站点运行此字符串 = 它显示字符串具有行尾 (LF) 字符(例如 "dob":"1970-08-[End of Line(LF) )])
- 使用 Notepad++ 替换 \r\n = 有效,在字符串中替换了 48 个匹配项。奇怪的是它不适用于代码。
- 通过 JSON lint 网站 (https://jsonlint.com/) 运行此字符串 = 在有换行符的位置显示无效的 JSON
我用来序列化 JSON 的代码是:
converter.Options.HttpPostParameters.Add("object", JsonConvert.SerializeObject(object).Replace("\r\n", "").Replace("\n", "").Replace("\r", ""))
我通过 Razor 页面上的脚本标记将其保存到前端,如下所示:
<script>
var object = "@HttpContext.Current.Request.Form["object"]";
</script>
我对这个问题束手无策。显然 var 中有一个换行符,但我无法使用代码检测或删除它。 C# 控制器中的原始字符串也使用 json.Replace("\r\n", "").Replace("\n", "").Replace("\r", "") 删除了这些字符,但不知何故,它不断被添加回 JavaScript var 中的相同点。
另一个令人沮丧的地方是,添加这些随机换行符的位置似乎不一致。一种分解出生日期字符串,另一些只是在整个 JSON 对象中的某些键或值之前应用换行符。有人有什么建议吗?
【问题讨论】:
-
“我有一段将 JSON 对象序列化为字符串的代码” - 这将是有用的代码。我不确定您为什么要尝试更改结果字符串,而不是控制字符串的生成方式。
-
它基本上看起来像这样:
converter.Options.HttpPostParameters.Add("object", JsonConvert.SerializeObject(object).Replace("\r\n", "").Replace("\n", "").Replace("\r", ""))并且在 Razor 前端通过以下方式访问:@HttpContext.Current.Request.Form["object"] -
你能把它编辑成你的问题吗?默认情况下,JSON.Net 应该序列化没有任何换行符的值。澄清一下:您是要删除换行符还是转义的换行符?
-
我正在尝试删除所有换行符,以便可以使用 JSON.parse 将 var 对象成功反序列化回 JSON 对象。
标签: javascript c# json