Newtonsoft转义JSON字符串无法反序列化为对象

2023-12-31

问题背景:

我通过 HttpResponseMessage 接收 JSON 响应,如下所示:

var jsonString= response.Content.ReadAsStringAsync().Result;

这给了我以下简单的转义 JSON 字符串结果:

"\"{\\\"A\\\":\\\"B\\\"}\""

问题:

我正在使用 Newtonsoft 尝试将其反序列化为模型:

SimpleModel simpleModel= JsonConvert.DeserializeObject<SimpleModel>(jsonString);

的类模型SimpleModel:

 public class SimpleModel
 {
     public string A { set; get; }
 }

转换给我以下错误:

An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Error converting value "{"A":"B"}" to type 'PyeWebClient.Tests.ModelConversionTests+SimpleModel'. Path '', line 1, position 15.

我从任务结果收到的 JSON 是有效的,因此我无法理解导致转换错误的问题是什么,格式化 JSON 字符串以便将其转换为 C# 模型类型的正确方法是什么?


你的json出现serialize twice.

1)因此,您必须首先反序列化为字符串,然后再次反序列化为您的SimpleModel like

string json = "\"{\\\"A\\\":\\\"B\\\"}\"";

string firstDeserialize = JsonConvert.DeserializeObject<string>(json);

SimpleModel simpleModel = JsonConvert.DeserializeObject<SimpleModel>(firstDeserialize); 

Output:

2)如果您不想反序列化两次,请将 json 解析为JToken然后再次将其解析为JObject like

string json = "\"{\\\"A\\\":\\\"B\\\"}\"";

JToken jToken = JToken.Parse(json);
JObject jObject = JObject.Parse((string)jToken);

SimpleModel simpleModel = jObject.ToObject<SimpleModel>();

Output:

问题:怎么会被序列化两次呢?

Answer:当您返回结果时HttpResponseMessage您成功序列化了您的结果,并在读取此结果后ReadAsStringAsync然后这个方法再次序列化已经序列化的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Newtonsoft转义JSON字符串无法反序列化为对象 的相关文章

随机推荐

  • ASP.NET Core 1.0 是否支持 ApiExplorer?如何使用它?

    ASP NET Core 1 0支持使用API Explorer吗 我无法找到任何有关它的文档或如何使用它 有人使用过它并且可以分享一些见解吗 Itay的回答帮助我得到了我想要的答案 Rob Lang 博士向任何需要使用 ApiExplor
  • ajax 调用的生命周期是多长?

    假设我在 javascript 中有这段代码 function doAnAjaxCall var xhr1 new XMLHttpRequest xhr1 open GET mylink true xhr1 onreadystatechan
  • 错误:运算符“++”的操作数必须是左值

    In C i j 在代码中工作正常 但是当我使用时 i j 我收到以下错误 Operand for operator must be an lvalue 为什么我会收到此错误 后自增要求操作数应该是可修改的左值但后自增的结果是prvalue
  • 会话超时混乱 - session.setMaxInactiveInterval(0)

    我是 JEE 的新手 这让我感到困惑 根据HttpSession html setMaxInactiveInterval int 间隔 http docs oracle com javaee 7 api javax servlet http
  • 共享 OpenGL VAO/VBO/等。通过 QGLWidget

    我正在使用 QGLWidgets 的 3 层层次结构在我的类似 CAD 的应用程序中的 5 个 OpenGL 视口之间共享着色器和顶点数据 根上下文用于编译应用程序范围的着色器 每个文档上下文用于共享模型顶点数据 视口上下文是实际进行渲染的
  • 如何在 XML 属性值中包含 &、<、> 等

    我想创建一个 XML 文件 用于存储 Java 程序的结构 我能够成功解析 Java 程序并根据需要创建标签 当我尝试将源代码包含在标签中时 问题就出现了 因为 Java 源代码可能使用大量实体引用和保留字符 例如 lt gt 我无法创建有
  • d3 过滤后无法附加完整数据

    我有一个项目的简化版本 我将其浓缩为以下片段 var margins top 20 bottom 300 left 100 right 100 var height 600 var width 1200 var totalWidth wid
  • 将 GraphML 转换为 GV 或 Dot 文件

    如何使用 graphml 文件作为输入在 graphviz 中绘制图形 I know graphviz附带graphml2gv为此目的 但是当我尝试从命令提示符运行此命令时 我收到此消息 cvtgxl not configured for
  • 如何在我的父 git 项目中使用 git 存储库?

    我尝试使用子模块将 github 存储库中的副本保留在我的第 3 方目录中 创建并获取文件后 当我从项目提交时 它只能看到文件夹 看不到文件 是的 文件在那里 有具体命令吗 在 GitHub 上 你只会看到一个灰色文件夹 https sta
  • Jackson 中的 readValue 和 readTree:何时使用哪个?

    我刚刚开始使用 Jackson JSON 库 Jackson 是一个非常强大的库 但它有非常广泛的 API 很多事情可以通过多种方式完成 这使得你很难在杰克逊找到自己的方式 如何知道什么是正确 最好的做事方式 为什么我要使用这个解决方案 S
  • C 中的递归函数:return 总是必要的吗?

    这是我第一次使用递归函数 我编写的这个函数如果仅包含按升序排列的字母 则返回字符串的大小 否则返回 1 在我取出第二个 返回 后 我不明白为什么它对这两个代码都有效 一个比另一个更浪费吗 希望有一些见解 with returnonly as
  • opencv4nodejs如何计算拉普拉斯方差的模糊度

    我有一个代码 const cv require opencv4nodejs let text let image cv imread images focused jpg let gray image cvtColor cv COLOR B
  • Apache Kafka 0.9.0.0 显示所有带分区的主题

    我目前正在评估 Apache Kafka 我有一个简单的消费者 应该从特定主题分区读取消息 这是我的客户 public static void main String args Properties props new Properties
  • Pyspark dataframe 获取列的所有值

    我想获取 pyspark 数据框中列的所有值 我做了一些搜索 但从未找到有效且简短的解决方案 假设我想在名为 name 的列中获取一个值 我有一个解决方案 sum dataframe select name toPandas values
  • 如何停止 Kubernetes 控制平面 Pod?

    只是好奇 使用 mesos 我已经习惯了能够做到这一点systemctl stop mesos master and systemctl start mesos master 如果我因某种原因需要退回 对于 k8s 控制平面中有多个组件需要
  • 检查端口是否开放

    我似乎找不到任何东西可以告诉我路由器中的端口是否打开 这可能吗 我现在拥有的代码似乎并不能真正工作 private void ScanPort string hostname localhost int portno 9081 IPAddr
  • 如何在Maven项目中包含本地jar文件[重复]

    这个问题在这里已经有答案了 我不想将一些 jar 安装到 Maven 存储库 本地 远程 中 特别是我有一些 jar 文件位于 c work projects myapp src main webapp WEB INF lib test j
  • Asciifolding 不起作用 Elastic Search Rails

    我在试图获得 阿斯奇折叠 为我的 Rails 应用程序工作 我想搜索包含 的单词accented 例如我想要的字符 for ige 当我搜索时出现 foroige 我已经尝试了很多事情 下面是其中的一些 analysis analyzer
  • Cocoa:WKWebView / WebView 无法打开 Gmail 或 Inbox 内的链接

    我是开发者Boxy http boxyapp co 一个著名的 Inbox by Gmail 原生包装器 我想询问是否有人能够帮助解决我从开发第一天起就一直在努力解决的问题 问题是这样的 链接inbox google com http in
  • Newtonsoft转义JSON字符串无法反序列化为对象

    问题背景 我通过 HttpResponseMessage 接收 JSON 响应 如下所示 var jsonString response Content ReadAsStringAsync Result 这给了我以下简单的转义 JSON 字