【问题标题】:Converting API JSON result into type fails将 API JSON 结果转换为类型失败
【发布时间】:2019-09-30 21:03:22
【问题描述】:

我们有一些 JSON 返回如下:

[
   {
       "id" : "120421421",
       "activityId" : "2049192",
       ...
   },
   {
       "id" : "24442141",
       "activityId" : "2141245",
       ...
   },
]

我看到以前有人问过这个问题,但不确定答案是否解释了这里的确切情况。 -- 无法反序列化当前的 JSON 数组(例如 [1,2,3])

问题似乎是数据是一个结果数组,而不仅仅是一种类。

我们使用基于泛型的 API 调用来调用我们的 API。

   result.Data = response.Content.ReadAsAsync<T>().Result;
   result.Json = response.Content.ReadAsStringAsync().Result;

将结果解析为传入的类型是失败的。我们设置了几个类来处理结果。

        public abstract class AvailabilityResult
        {
            public List<AvailabilityEntry> ResultList;
        }

        public abstract class AvailabilityEntry
        {
            public string id { get; set; }
            public string activityId { get; set; }
        }

【问题讨论】:

  • 反序列化为一个集合。
  • @Nkosi 我可以在抽象类中这样做,以免影响处理对 result.data 响应的 apiclient 类的其他用法吗?
  • 是的。调用者是您需要进行数组调用的地方。
  • 我可以通过更改类定义来实现此功能。请参阅下面的答案,这种方法有什么问题吗?它不必更改用于多个其他 api 的 api 调用程序'
  • 您应该能够删除 ResultList 属性,因为类本身代表数组

标签: asp.net json asp.net-mvc rest asp.net-core


【解决方案1】:
        [JsonArrayAttribute]
        public class AvailabilityResult : List<AvailabilityEntry>
        {
            public List<AvailabilityEntry> ResultList;
        }

        public abstract class AvailabilityEntry
        {
            public string id { get; set; }
            public string activityId { get; set; }
        }

【讨论】:

  • 您应该能够删除ResultList 属性,因为类本身代表数组
猜你喜欢
  • 2020-11-10
  • 2021-01-15
  • 1970-01-01
  • 2015-03-31
  • 2014-02-03
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多