使用 HttpContent.ReadAsAsync<T> 解析带有一个对象或数组的响应

Posted

技术标签:

【中文标题】使用 HttpContent.ReadAsAsync<T> 解析带有一个对象或数组的响应【英文标题】:Using HttpContent.ReadAsAsync<T> to parse responses with one object or an array 【发布时间】:2021-07-20 16:18:56 【问题描述】:

我正在集成到从几乎端点返回此模型的 API


  meta:  ... ,
  data:  ... 

但对于某些调用,数据是同种对象的数组


  meta:  ... ,
  data: [
     ... ,
     ... 
  ]

我想使用 HttpContent.ReadAsAsync&lt;ResponseObj&gt; 将这两个转换为我的 C# 类,并且我已经设置了 Response 类,如下所示:

public class ResponseObj 
  public MetaObj Meta get;set;
  public DataObj[] Data get;set;

有点出乎意料,我在尝试解析第一个响应时遇到了异常。是否可以告诉 JSON 解析器处理单个数据对象并返回一个单元素数组?

我能看到的唯一其他解决方案是为两种不同的响应类型创建单独的 ResponseObj 定义。

【问题讨论】:

【参考方案1】:

将您的 ResponseObj 创建为通用类。

public class ResponseObj<T> 
  public MetaObj Meta get;set;
  public T Data get;set;

您可以使用HttpContent.ReadAsAsync&lt;ResponseObj&lt;DataObj&gt;&gt;HttpContent.ReadAsAsync&lt;ResponseObj&lt;DataObj[]&gt;&gt; 反序列化json

【讨论】:

以上是关于使用 HttpContent.ReadAsAsync<T> 解析带有一个对象或数组的响应的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)