dod*_*ron 20 javascript c# json json.net asp.net-mvc-3
我正在使用JSON.Net作为我在c#和Razor视图引擎中的大型MVC 3 Web应用程序的序列化程序.对于一个视图中的初始页面加载,脚本标记中使用了大量的JSON转储@Html.Raw(JsonConvert.SerializeObject(myObject)).
问题是某些对象的某些值包含撇号(想想像O'Brien这样的名字),JSON.Net没有以任何方式转义或编码.
对预存储在数据库中的值进行预编码不是一种选择,因为这会使各种其他进程复杂化.
有没有办法强制JSON.Net对其序列化的对象的值进行HTML编码,就像内置的JavaScriptSerializer在调用时一样JavaScriptSerializer.Serialize(myObject)?或者,有没有办法在视图中处理这个问题?
小智 26
JsonSerializerSettings settings = new JsonSerializerSettings
{
StringEscapeHandling = StringEscapeHandling.EscapeHtml
};
JsonConvert.SerializeObject(obj, settings);
Run Code Online (Sandbox Code Playgroud)
Pav*_*shy 16
您可以像这样创建自定义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);
}
}
Run Code Online (Sandbox Code Playgroud)
要仅将此属性用于Name属性,请按属性指定:
public class Person
{
[JsonConverter(typeof(EscapeQuoteConverter))]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要将Converter应用于所有字符串,请使用:
JsonConvert.SerializeObject(person, Formatting.Indented, new EscapeQuoteConverter());
Run Code Online (Sandbox Code Playgroud)
Poi*_*nty 16
虽然在某些情况下您可能希望将某些JSON作为JavaScript字符串或HTML属性值放入页面中,但大多数情况下您只需将其直接包含在JavaScript源代码中,因为JSON之后是有效的JavaScript语法所有.
| 归档时间: |
|
| 查看次数: |
36275 次 |
| 最近记录: |