Json.NET:使用双引号进行消毒
我试图反序列化作为服务响应收到的json字符串。 客户端是Windows Phone 7,在C#中。 我正在使用Json .NET – James Newton-King deserializor直接将Json字符串转换为对象。 但有时Json字符串包含一些带有双引号(“)的注释信息,并且反序列化器失败并引发错误。根据Jsonlint看起来这是一个无效的Json字符串。
{ "Name": "A1", "Description": "description of the "object" A1" }
如何处理这样的Json String。 如果它是(“),那么它可以工作。但我不能用(”)替换所有(“),因为在json字符串的其他部分可能有双引号。是否有任何Json .Net的解码函数?
它看起来像HttpUtility.JavaScriptStringEncode可能会解决您的问题。
HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(yourObject))
做就是了:
yourJsonString = yourJsonString.Replace(""", "\u022"); object o = JSonConvert.Deserialize(yourJsonString);
u022是双引号的ascii代码。 因此,您的浏览器将识别替换 u022的引号。
并在“ u022”中使用来使c#识别反斜杠字符。
干杯
我建议给服务器管理员/网站管理员写电子邮件,并要求他们用json解决这个问题。
但是如果这是不可能的,你可以编写一个简单的解析,在双引号中找到非扩展的双引号并转义它们。 它几乎不会超过20行代码。
我有同样的问题,我找到了一个可能的解决方案。 想法是捕获JsonReaderException。 此exception为您带来属性“LinePosition”。 您可以将此位置替换为空字符(”)。 然后,递归使用此方法,直到修复整个json。 这是我的例子:
private JToken processJsonString(string data, int failPosition) { string json = ""; var doubleQuote = """; try { var jsonChars = data.ToCharArray(); if (jsonChars[failPosition - 1].ToString().Equals(doubleQuote)) { jsonChars[failPosition - 1] = ' '; } json = new string(jsonChars); return JToken.Parse(json); } catch(JsonReaderException jsonException) { return this.processJsonString(json, jsonException.LinePosition); } }
我希望你喜欢它。
上述就是C#学习教程:Json.NET:使用双引号进行消毒分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022822.html