如何解码嵌入在json字符串中的HTML编码字符

时间:2009-07-09 02:25:47

标签: c# json

我有一个关于从JSon结果解码特殊字符的问题(在我的例子中,\ x27但它可能是任何有效的html编码字符)。如果结果不包含任何转义字符,则效果很好但如果没有,则会出现无法识别的转义序列异常。我尝试在使用JavascriptSerializer反序列化之前对Json字符串执行HttpUtility.HtmlDecode,它不起作用,字符仍然是编码格式。

以下是代码段:

public IEnumerable<QuoteInfo> ParseJson(string json)
{
    System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
    List<QuoteInfo> result = jss.Deserialize<List<QuoteInfo>>(System.Web.HttpUtility.HtmlDecode(json));
    return result;
}

我尝试使用RegistersConverters来HtmlDecode我在反序列化过程中可以找到的任何字符串,但我无法弄清楚如何正确使用它。

我该如何解决这个问题?

正如back2dos很好地解释的那样,这个问题与HtmlDecode问题无关,而是与格式错误的Json字符串有关。

2 个答案:

答案 0 :(得分:4)

好吧,我对C#有非常肤浅的了解,而对.NET API却没有,但直觉上HtmlDecode应解码HTML entities(如果我是,请原谅我我知道,编码是非常糟糕的,所以我会尝试清楚地解释你所拥有的,你尝试过的和应该起作用之间的差异......

正确的 HTML 实体将是&#x27而不是\x27 ... \x27是十六进制 < em> ASCII 转义序列,已被某些JSON解码器和许多编程语言所接受,但 HTML完全无关 ......

而且,它与JSON无关,这是问题... JSON specs for strings不允许十六进制 ASCII escape-sequences ,但是只有 Unicode 转义序列,这就是无法识别转义序列的原因,这就是使用\u0027代替的原因应该工作......现在你可以用\x盲目地取代\u00(这应该完全适用于有效 JSON,尽管有些评论可能在理论上受到损害,但谁在乎......:D)

但就个人而言,如果您有权访问该来源,则应对其进行修改,以使其输出有效 JSON以符合规范......

格尔茨

back2dos

答案 1 :(得分:0)

我不确定我是否理解这些要求,但您可以尝试查看System.Security.SecurityElement.Escape(这就是我正在使用的,我猜这里有一个unescape,但现在没有时间检查api,必须去参加会议)

祝你好运