我有一个关于从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字符串有关。
答案 0 :(得分:4)
好吧,我对C#
有非常肤浅的了解,而对.NET
API却没有,但直觉上HtmlDecode
应解码HTML entities(如果我是,请原谅我我知道,编码是非常糟糕的,所以我会尝试清楚地解释你所拥有的,你尝试过的和应该起作用之间的差异......
正确的 HTML 实体将是'
而不是\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,必须去参加会议)
祝你好运