首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json.NET:使用双引号进行去中心化

Json.NET:使用双引号进行去中心化
EN

Stack Overflow用户
提问于 2011-11-13 11:50:24
回答 6查看 27.8K关注 0票数 9

我正在尝试反序列化作为服务响应接收的json字符串。客户端是C#中的Windows phone7。我正在使用Json反序列化程序直接将Json .NET - James Newton-King字符串转换为对象。但是有时Json字符串中包含一些带有双引号(")的注释信息,反序列化器会失败并抛出一个错误。根据Jsonlint,这看起来是一个无效的Json字符串。

代码语言:javascript
复制
{
    "Name": "A1",
    "Description": "description of the "object" A1"
}

如何处理这样的Json字符串。如果是(\"),就可以了。但是我不能把所有的(")替换成(\"),因为json字符串的其他部分可能会有双引号。Json .Net有解码功能吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-02-08 20:16:57

看起来HttpUtility.JavaScriptStringEncode可能会解决你的问题。

代码语言:javascript
复制
HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(yourObject))
票数 13
EN

Stack Overflow用户

发布于 2014-01-23 04:35:27

只需这样做:

代码语言:javascript
复制
yourJsonString = yourJsonString.Replace("\"", "\\u022");
object o = JSonConvert.Deserialize(yourJsonString);

\u022是双引号的ascii代码。因此,您的浏览器将识别\u022的替换引号。

并在"\u022“中使用\使c#识别反斜杠字符。

干杯

票数 2
EN

Stack Overflow用户

发布于 2019-03-22 22:59:03

你可以改进这一点。

代码语言:javascript
复制
    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);
    }

示例;

代码语言:javascript
复制
var item = CleanJson<ModelItem>(jsonString);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8109464

复制
相关文章

相似问题

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