[英]Unremovable Line Breaks in JavaScript string
我有一段代碼將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仍然使用相同的字符串輸出,包括所有隨機換行符。 如果我的正則表達式錯誤,請更正我。 我用來序列化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對象中的某些鍵或值之前應用換行符。 有沒有人有什么建議?
我不確定默認值是否隨着時間而改變,但是JSON.NET的當前默認值是no formating。 如果您的版本不是默認值,則可以手動更改/設置此值:
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
中有一些類型緩存功能,因此,如果您使用公共實例(例如,不要在循環中定義它,或者將其定義為經常使用的類中的字段),則可以更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.