![](/img/trans.png)
[英]Are there any attributes for serializing Enums as strings in Json.NET?
[英]Serializing strings containing apostrophes with JSON.Net
我正在使用JSON.Net作為我在c#和Razor視圖引擎中的大型MVC 3 Web應用程序的序列化程序。 對於一個視圖中的初始頁面加載,使用@Html.Raw(JsonConvert.SerializeObject(myObject))
在腳本標記內轉儲了大量JSON。
問題是某些對象的某些值包含撇號(想想像O'Brien這樣的名字),JSON.Net沒有以任何方式轉義或編碼。
對預存儲在數據庫中的值進行預編碼不是一種選擇,因為這會使各種其他進程復雜化。
有沒有辦法強制JSON.Net對HTML序列化對象的值進行編碼,就像調用JavaScriptSerializer.Serialize(myObject)
時內置的JavaScriptSerializer一樣? 或者,有沒有辦法在視圖中處理這個問題?
JsonSerializerSettings settings = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml
};
JsonConvert.SerializeObject(obj, settings);
您可以像這樣創建自定義JsonConverter:
public class EscapeQuoteConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString().Replace("'", "\\'"));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var value = JToken.Load(reader).Value<string>();
return value.Replace("\\'", "'");
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
}
要僅將此屬性用於Name屬性,請按屬性指定:
public class Person
{
[JsonConverter(typeof(EscapeQuoteConverter))]
public string Name { get; set; }
}
要將Converter應用於所有字符串,請使用:
JsonConvert.SerializeObject(person, Formatting.Indented, new EscapeQuoteConverter());
雖然在某些情況下您可能希望將某些JSON作為JavaScript字符串或HTML屬性值放入頁面中,但大多數情況下您只需將其直接包含在JavaScript源代碼中,因為JSON之后是有效的JavaScript語法所有。
使用System.Web.HttpUtility.HtmlEncode
HttpUtility.HtmlEncode(JsonConvert.SerializeObject(myObject))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.