簡體   English   中英

Jsonconvert serializeobject 不轉義單引號

[英]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 規范

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM