【问题标题】:A back slash get added before the json string and throws issue with deserialization在 json 字符串之前添加反斜杠并引发反序列化问题
【发布时间】:2020-12-09 17:00:08
【问题描述】:

我从 API 调用返回了 JSON 数据,当从 HTTP 响应读取为字符串时,在 JSON 字符串的开头和结尾的花括号 ({) 之前添加了一个反斜杠。因此,在将 JSON 值反序列化为对象时会引发异常。

我已经使用下面的代码读取了字符串。

string value = await httpResponse.Content.ReadAsStringAsync();

结果是

"\"{\"key\":null}\""**

由于在大括号之后添加了不需要的斜杠,在反序列化中抛出异常,因为 JSON 值无法转换为对象类型。

【问题讨论】:

  • 是转义字符
  • 所以看起来斜线就是 Visual Studio 向您显示字符串的方式。看起来 HTTP 调用给了你一个 JSON 编码的字符串,很难准确地说出来。
  • 如果它在你的变量中,你可以做value.Replace("\\", "");
  • 抛出的异常是什么?
  • @RufusL 这是例外 JSON 值无法转换为(我的自定义对象)。

标签: c# blazor blazor-server-side


【解决方案1】:

您为密钥响应请求的 API 似乎将对象序列化为 JSON 两次左右。它通常会提供您提到的转义字符串。

试试这个:

var unescaped = JsonConvert.DeserializeObject<string>(value);
var key = JsonConvert.DeserializeObject<MyKeyClass>(unescaped);

假设您的 MyKeyClass 是这样的:

public class MyKeyClass {
   public string Key { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2013-05-29
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2017-05-12
    相关资源
    最近更新 更多