【问题标题】:C# Newsoft.Json Deserialize fails with nested "C# Newsoft.Json 反序列化失败,嵌套“
【发布时间】:2014-11-26 07:09:00
【问题描述】:

我正在通过如下所示的 HTTP 请求从 Web 服务获取一些数据:

{
    ...
    "status" : "some_status",
    ...
}

返回的字符由\(即\"status\" : \"some_status\")转义,我使用Newsoft.Json 将返回的数据反序列化为(自定义)对象。问题是,当"some_status" 本身包含" 时:

{
    ...
    "status" : "some_status "hello world"",
    ...
}

再次,每个" 转义为\",反序列化失败并返回unexpected character

如何指定使用Newsoft.Json 完全忽略或删除内部"?或者如果不可能,也许使用Regex

谢谢。

【问题讨论】:

  • 为什么它首先没有转义?您可以将内部双引号更改为单引号。我会说你收到的 json-string 是无效的。

标签: c# json serialization escaping


【解决方案1】:

没有任何 JSON 解析器能够处理一开始就没有正确格式化的 JSON 字符串。

所以您需要确保您的 theModel 格式正确并符合JSON.org 标准。

【讨论】:

    【解决方案2】:

    您的 JSON 字符串不正确。双引号之间的字符串不能包含其他双引号。 如果有用,您可以使用在线编辑器测试您的 JSON 字符串:http://www.jsoneditoronline.org/

    您不能删除双引号,否则您的结果将不再被视为字符串,而是被视为 int。

    我不知道你是如何管理你的网络电话和使用反斜杠的,但通常你应该有这样的东西:

    WebClient client = new WebClient();
    Stream stream = client.OpenRead("http://.....");
    StreamReader reader = new StreamReader(stream);
    object obj = Newtonsoft.Json.JsonConvert.DeserializeObject<object>`(reader.Read().ToString());
    

    object 是你想要反序列化的对象的类型

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多