将更改JSON从T更改为List <T>

时间:2019-11-20 07:22:19

标签: c# json

我正在ActionStep API上调用“ Actions”端点,并且未返回预期的JSON结果。

当我调用API时,它可以返回一个或多个“动作”,一个列表。

public List<Action> actions { get; set; }

我要反序列化的模型反映了什么。我认为,即使列表仅包含一个Action,这也应该起作用。

但是,如果系统中有1、51、101、151等个操作,则JSON不会以“ LIST / ARRAY”的形式返回,而是以单个Action的形式返回。 (端点每页返回50个结果。)

以下是api调用第20页返回的示例:

(每页有50个结果,系统中有951个操作)

{"links":{"actions.assignedTo":{"href":"https:\/\/us-east-1.actionstep.com.actionstep.com\/api\/rest\/participants\/{actions.assignedTo}","type":"participants"},"actions.actionType":{"href":"https:\/\/us-east-1.actionstep.com.actionstep.com\/api\/rest\/actiontypes\/{actions.actionType}","type":"actiontypes"},"actions.primaryParticipants":{"href":"https:\/\/us-east-1.actionstep.com.actionstep.com\/api\/rest\/participants\/{actions.primaryParticipants}","type":"participants"},"actions.relatedActions":{"href":"https:\/\/us-east-1.actionstep.com.actionstep.com\/api\/rest\/actions\/{actions.relatedActions}","type":"actions"}},"actions":{"id":3952,"name":"Corporate","reference":null,"priority":0,"status":"Active","statusTimestamp":"2019-10-10T13:52:51-05:00","isBillableOverride":null,"createdTimestamp":"2019-10-10","modifiedTimestamp":"2019-10-10T13:56:33-05:00","isDeleted":"F","deletedBy":null,"deletedTimestamp":null,"isFavorite":"F","overrideBillingStatus":null,"lastAccessTimestamp":"2019-11-15T10:30:54-06:00","links":{"assignedTo":"9","actionType":"6","primaryParticipants":["4"],"relatedActions":null}},"meta":{"paging":{"actions":{"recordCount":951,"pageCount":20,"page":20,"pageSize":50,"prevPage":"https:\/\/us-east-1.actionstep.com\/api\/rest\/actions?page=19","nextPage":null}},"debug":{"requestTime":"0.084719","mem":"2.43mb","server":"app-ip-10-11-35-182.us-east-1.actionstep.com","cb":"T21726-22107-2","time":"2019-11-20 00:16:17 -0600 (America\/Chicago)","appload":"0.01, 0.04, 0.05","app":"0.017644","db":"0.067075","dbc":"0.008073","qc":"27","uqc":"23","fc":"751","rl":null}}}

在第20页之前的每个页面上,“操作”的JSON作为数组返回。在第20页上,由于它仅包含1个操作,因此它交换为单个项目。

当我反序列化第1至19页时,我的代码可以正常工作。但是,当尝试第20页时,它失败并显示:

  

无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`

我正在努力想办法解决这个问题。

我的想法是在反序列化原始JSON之前以某种方式检查原始JSON,以查看是否存在Action数组或单个Action。如果以某种方式存在单个Action,则“破解” JSON字符串以使其成为数组。

这将是某种字符串搜索/替换。

我可以看到如何进行搜索/替换以更改

  

“动作”:{

  

“动作”:[{

但是我不知道如何搜索/替换Action JSON的结尾并关闭数组。

这是解决此问题的最佳策略吗?

有人可以建议如何将其更改为数组吗?

更新:

我在下面的前2条评论中有建议的修复程序,但我正在努力使其正常运行。我相信是因为我的JSON比示例更复杂。

我已经上传了一个工作页面,下面是一个不完整的页面:

工作:https://codebeautify.org/jsonviewer/cb25f016

残破:https://codebeautify.org/jsonviewer/cbd79451

非常感谢您的帮助。

0 个答案:

没有答案