首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JSON.Net序列化包含撇号的字符串

使用JSON.Net序列化包含撇号的字符串
EN

Stack Overflow用户
提问于 2012-08-21 01:35:39
回答 4查看 38.8K关注 0票数 21

我使用JSON.Net作为c#和Razor视图引擎中一个大型MVC3Web应用程序的序列化程序。对于一个视图中的初始页面加载,使用@Html.Raw(JsonConvert.SerializeObject(myObject))将大量JSON转储到脚本标记中。

问题是一些对象的一些值包含撇号(比如O‘’Brien这样的名字),JSON.Net不会以任何方式对其进行转义或编码。

不能选择对存储在数据库中的值进行预编码,因为这会使其他各种过程变得非常复杂。

有没有办法强制JSON.Net对它序列化的对象的值进行超文本标记语言编码,就像调用JavaScriptSerializer.Serialize(myObject)时内置的JavaScriptSerializer所做的那样?或者,有没有办法在视图中处理这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-21 07:01:17

尽管在某些情况下,您可能希望将一些JSON作为JavaScript字符串或HTML属性值放到页面中,但大多数情况下,您要做的只是将其直接包含到JavaScript源代码中,因为JSON毕竟是有效的JavaScript语法。

票数 18
EN

Stack Overflow用户

发布于 2015-01-09 19:41:09

代码语言:javascript
复制
JsonSerializerSettings settings = new JsonSerializerSettings
{
    StringEscapeHandling = StringEscapeHandling.EscapeHtml
};

JsonConvert.SerializeObject(obj, settings);
票数 30
EN

Stack Overflow用户

发布于 2012-08-21 02:24:34

您可以像这样创建自定义JsonConverter:

代码语言:javascript
复制
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属性,请按属性指定它:

代码语言:javascript
复制
public class Person 
{
    [JsonConverter(typeof(EscapeQuoteConverter))]
    public string Name { get; set; } 
}

要将Converter应用于所有字符串,请使用:

代码语言:javascript
复制
JsonConvert.SerializeObject(person, Formatting.Indented, new EscapeQuoteConverter());
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12042302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档