[英]Jsonconvert serializeobject not escaping single quote
C#,我有一個汽車類,在那個類中我有一個 VehicleTrim 字段。 我使用JsonConvert.SerializeObject
來序列化該類,並且它沒有轉義單引號。 當我嘗試通過window.localStorage.setItem
函數在 Web 中設置對象的值時,這會導致問題。
例子:
public class Automobile
{
public string vehicleTrim { get; set; }
}
var test = new Automobile()
{
vehicleTrim = "designer's package"
};
var serialized = JsonConvert.SerializeObject(test, Formatting.None);
// serialized output: {"vehicleTrim":"designer's package"}
// expected output : {"vehicleTrim":"designer\'s package"}
所以現在我想通過調用這個來將這個 json 對象設置為我的網絡的本地存儲
var jsSetScript = $"window.localStorage.setItem('automobile', '{serialized}');";
await Control.EvaluateJavascriptAsync(jsSetScript);
EvaluateJavascriptAsync 在嘗試讀取 json SyntaxError: Unexpected identifier 's'. Expected ')' to end an argument list.
返回此錯誤SyntaxError: Unexpected identifier 's'. Expected ')' to end an argument list.
SyntaxError: Unexpected identifier 's'. Expected ')' to end an argument list.
我用轉義的單引號手動嘗試了這個,它很好。 所以問題是如何讓 serializedobject 方法轉義單引號?
"\\'"
甚至不是有效的 JSON 字符串文字。 從JSON 規范:
因此'
不需要轉義,但如果是,則必須顯示為"\'"
。 只有列出的 8 個字符具有特殊的縮寫轉義語法。 (有關更多詳細信息,請參閱RFC 8259 。)
如果"\'"
滿足您的需求,那么將JsonSerializerSettings.StringEscapeHandling
設置為StringEscapeHandling.EscapeHtml
應該可以解決問題。 從文檔:
StringEscapeHandling 枚舉
指定寫入 JSON 文本時如何轉義字符串。
Default 0 Only control characters (eg newline) are escaped. EscapeNonAscii 1 All non-ASCII and control characters (eg newline) are escaped. EscapeHtml 2 HTML (<, >, &, ', ") and control characters (eg newline) are escaped.
因此,以下現在成功:
var settings = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml,
};
var serialized = JsonConvert.SerializeObject(test, Formatting.None, settings);
Console.WriteLine(serialized);
// Outputs {"vehicleTrim":"designer\u0027s package"}
Assert.IsTrue(!serialized.Contains('\''));
// Succeeds
演示小提琴在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.