我正在尝试反序列化作为服务响应接收的json字符串。客户端是C#中的Windows phone7。我正在使用Json反序列化程序直接将Json .NET - James Newton-King字符串转换为对象。但是有时Json字符串中包含一些带有双引号(")的注释信息,反序列化器会失败并抛出一个错误。根据Jsonlint,这看起来是一个无效的Json字符串。
{
"Name": "A1",
"Description": "description of the "object" A1"
}如何处理这样的Json字符串。如果是(\"),就可以了。但是我不能把所有的(")替换成(\"),因为json字符串的其他部分可能会有双引号。Json .Net有解码功能吗?
发布于 2013-02-08 20:16:57
看起来HttpUtility.JavaScriptStringEncode可能会解决你的问题。
HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(yourObject))发布于 2014-01-23 04:35:27
只需这样做:
yourJsonString = yourJsonString.Replace("\"", "\\u022");
object o = JSonConvert.Deserialize(yourJsonString);\u022是双引号的ascii代码。因此,您的浏览器将识别\u022的替换引号。
并在"\u022“中使用\使c#识别反斜杠字符。
干杯
发布于 2019-03-22 22:59:03
你可以改进这一点。
static private T CleanJson<T>(string jsonData)
{
var json = jsonData.Replace("\t", "").Replace("\r\n", "");
var loop = true;
do
{
try
{
var m = JsonConvert.DeserializeObject<T>(json);
loop = false;
}
catch (JsonReaderException ex)
{
var position = ex.LinePosition;
var invalidChar = json.Substring(position - 2, 2);
invalidChar = invalidChar.Replace("\"", "'");
json = $"{json.Substring(0, position -1)}{invalidChar}{json.Substring(position)}";
}
} while (loop);
return JsonConvert.DeserializeObject<T>(json);
}示例;
var item = CleanJson<ModelItem>(jsonString);https://stackoverflow.com/questions/8109464
复制相似问题