使用 RestSharp 将 JSON 数组反序列化为 C# 结构

2024-01-03

我使用 RestSharp 和动态地将不同的 JSON 结构转换为各种 C# 结构IRestResponse<T> response = client.Execute<T>(request)。但是,一个特定的 JSON 结果给我带来了麻烦,它以方括号开头和结尾......

我的 JSON 以“[”和“]”字符开头和结尾:

[
  {
    "first": "Adam",
    "last": "Buzzo"
  },
  {
    "first": "Jeffrey",
    "last": "Mosier"
  }
]

我创建了这个类结构:

public class Person
{
    public string first { get; set; }
    public string last { get; set; }
}
public class Persons
{
    public List<Person> person { get; set; }
}

我在方法中使用 RestSharp 动态反序列化到我的Persons类型 T...

IRestResponse<T> response = client.Execute<T>(request);
return response;

问题是当T是Persons我在客户端上收到此错误。执行行:

无法将“RestSharp.JsonArray”类型的对象转换为“System.Collections.Generic.IDictionary`2[System.String,System.Object]”类型。

我也尝试使用 Json.Net 并收到此错误:

无法将当前 JSON 数组(例如 [1,2,3])反序列化为“Persons”类型,因为该类型需要 JSON 对象(例如 {\"name\":\"value\"})才能正确反序列化。

鉴于最初的“[”字符,我尝试反序列化为List of Persons。这停止了​​错误消息,我有正确数量的“人”记录,但它们都是空的。 (我确认名称的大小写是相同的。)当目标服务器中的数组始终只有一个元素时,我也不想使用 List 集合,因此绑定到“Persons”比“List”更有意义。

将此 JSON 反序列化为的正确方法是什么Persons并且还在我的动态范围之内IRestResponse<T> response = client.Execute<T>(request)方法?


正如评论中提到的,您的 json 包含一个人员数组。因此,要反序列化的目标结构应该与之匹配。 要么使用:

var response = client.Execute<List<Person>>(request);

或者如果您更喜欢Persons类,将其更改为

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

使用 RestSharp 将 JSON 数组反序列化为 C# 结构 的相关文章

随机推荐

  • 通过滚动窗口分区计算不同客户的数量

    我的问题类似于redshift 通过窗口分区计算不同客户的数量 https stackoverflow com questions 47736584 redshift count distinct customers over window
  • 我不知道 Postgresql 如何在我的 mac 上创建用户

    前两天开始学习postgresql 我在网上遵循的大多数教程要么是旧的 要么是代码不能在我的 Mac 上运行 我遵循了很多教程 做了很多完全不同的事情 当我今天打开系统时 我注意到 Postgresql 在我的 mac 上创建了一个用户 我
  • @Input() 在 Angular 中的用途是什么?

    我正在学习创建功能组件 https angular io tutorial toh pt3 add the input hero propertyangular io 上的教程然后我注意到 Input装饰器属性 src app hero d
  • wtforms 表单类子类化和字段排序

    我有一个用户窗体类 class UserForm Form first name TextField u First name validators Required last name TextField u Last name vali
  • 确定事件处理程序的优先级

    我有以下代码 我处理一个事件两次 但我总是想确保mynewclass始终首先处理事件 然后触发本地事件处理程序代码 我知道 MyClass 事件应该首先触发 因为这是第一个创建的事件 但由于线程和排队正在发生 我认为它花费了太长时间并且它在
  • 在 Python 程序中嵌入 Python shell

    我正在用 Python 创建一个科学实验室 用户可以在其中创建 修改和分析各种对象 我想在程序中放置一个Python shell 以便用户可以通过shell操作对象 注 他还可以通过常用的 GUI 来操纵对象 一个模型可以说明这一点 htt
  • jQuery load() 在 IE 中抛出“权限被拒绝”错误

    我正在通过 AJAX 使用 jQuery 加载页面load 功能 它在 IE8 中不起作用 给出 权限被拒绝 错误 使用 IE 调试器 似乎当 jQuery 尝试打开 xhr 时 ie 会阻止它 问题是 我的页面有一个 javascript
  • jars 似乎不再被签名。 JARSigningException:找到未签名的条目

    NB 7 4RC2 Win 7 在 Java 控制面板中 选中 保留临时 Internet 文件 复选框 我正在使用受信任的证书签署我的 Web Start 应用程序 然而 dist lib 中的第 3 方 jar 似乎未签名 C Prog
  • 更改代码后,PowerShell ISE 有时会出现不可预测的行为

    我正在使用 PowerShell ISE PS 版本 5 0 如果我运行这段代码 Write Host This 它输出 This 如果我像这样修改脚本 Write Host That 它输出 That 伟大的 正如预期的那样 现在 如果我
  • 无法在第二轮中将项目添加到集合中

    基本上我的 Windows 服务应用程序中有一个阻塞集合 每次我想向集合中添加 4 个项目然后对其进行处理 第一轮还好 第二轮就失败了 错误是 BlockingCollection 已被标记为已完成添加 My code public sta
  • Python - 以毫秒为单位的时间差对我不起作用

    我读过一些关于此的文章 并认为我有一些有效的代码 如果两个值之间的差异小于 1 秒 则显示的毫秒是正确的 如果差异超过一秒 它仍然只显示毫秒的差异 如下 Correct now wind 2013 08 25 08 43 04 776209
  • 在自己的数据集上训练 Tensorflow 对象检测

    在花了几天时间尝试完成这项任务之后 我想分享一下我如何回答这个问题的经验 我该如何使用TS 物体检测 https github com tensorflow models tree master research object detect
  • if (true) 的目的

    我见过一些这样写的代码 if true do something 你为什么要做这样的事情 这个结构有什么特别的地方吗 THanks 几乎任何现代编译器都会对此进行优化 我的猜测是 有人在开发过程中把它放在那里 让他们轻松删除代码块 通过更改
  • 如何防止argv中丢失双引号?

    好吧 我知道我可以这样循环 for int i 1 i lt argc 1 i cout lt lt argv i lt lt endl 但是这样双引号就丢失了 那就是一个字符串 something here 被视为 args 数组的一个元
  • 在绘图表达式中使用变量

    我试图将回归结果 即 R2 放入图表中 但似乎无法弄清楚如何从表达式中调用变量 它粘贴变量名称 这是我的代码 R2Val lt signif summary sMod pre90 r squared 1 2 text 92 4 expres
  • zsh compinit:安装 Homebrew 后,Mac 上出现不安全目录错误消息

    在我的 Mac 上安装 Homebrew 和 Homebrew Cask 后 以管理员身份 用户 ID 为 admin 运行 MacOS 10 12 6 我收到错误消息 zsh compinit insecure directories r
  • 发生整数溢出时无符号和有符号整数的行为差异[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 iOS 7.1 到 iOS 8 发送数据时 BLE 花费太多时间

    我有一个奇怪的问题 我正在开发一个应用程序 我在其中发送20 20 字节的块 一切正常 当我发送字节数据时从 iOS 8 到 iOS 8设备从一个设备传输到另一个设备大约需要 4 5 秒 但我的问题是当我从iOS 7 1 至 iOS 8或者
  • 状态机;为什么只有最后一个状态有效?

    我有一个有 6 个状态 3 个主要状态 的状态机 只有最后一个状态有效 但前 2 个状态无效 共 3 个 只有最后一个状态有效 我发现了问题 当我移除去抖电路时它可以工作 但我需要去抖电路 我从网上得到了去抖电路 如果有人可以提供帮助 我会
  • 使用 RestSharp 将 JSON 数组反序列化为 C# 结构

    我使用 RestSharp 和动态地将不同的 JSON 结构转换为各种 C 结构IRestResponse