JavaScript字符串中无法删除的换行符

时间:2019-02-20 04:38:43

标签: javascript c# json

我有一段代码在MVC C#控制器中将JSON对象序列化为字符串。然后,我需要使用此序列化的JSON在前端设置JavaScript变量的值。

当我尝试将其反序列化回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- [行尾(LF)])
  • 使用记事本++替换\ 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变量中的相同点。

另一个令人沮丧的地方是,添加这些随机换行符的位置似乎不一致。一个分解了一个出生日期字符串,另一个简单地在整个JSON对象中的某些键或值之前应用换行符。有人有建议吗?

1 个答案:

答案 0 :(得分:0)

我不确定默认值是否随着时间而改变,但是JSON.NET的当前默认值为no formatting。如果您的版本不是默认值,则可以手动更改/设置此值:

var noFormatting = new JsonSerializerSettings();
noFormatting.Formatting = Formatting.None;


var test = new {
    Name = "Test\r\nName",
    Value = "Test2"
};

Console.WriteLine(JsonConvert.SerializeObject(test, noFormatting));

结果:

{"Name":"Test\r\nName","Value":"Test2"}

或者您可能会在调试器中看到它:

string value = "{\"Name\":\"Test\\r\\nName\",\"Value\":\"Test2\"}";

请注意,JsonSerializerSettings中有一些类型缓存功能,因此,如果您使用公共实例(例如,不要在循环中定义它,或将其定义为类中的字段,则可以更快)。它用了很多)。

Try it online