无法反序列化当前 JSON - DeserializeObject - 模型错误

分享于2022年07月17日 .net arrays c# ienumerable json 问答
【问题标题】:无法反序列化当前 JSON - DeserializeObject - 模型错误(Cannot deserialize the current JSON - DeserializeObject - Bad model)
【发布时间】:2022-07-12 15:41:55
【问题描述】:

我尝试从 api 下载数据,但出现错误:DeserializeObject

我想我有一个糟糕的模型:ObjectResponse

但我想不出还有什么方法可以构建它

我使用 Newtonsoft.Json

控制器

private async Task>> GetItemsAsync(string uri)
  {
    var result = await _client.GetStringAsync(uri);

    return JsonConvert.DeserializeObject>>(result);
  }

结果我有:

"{"success":true,"data":{"leasingItems":[],"suspectedItems":[]}}"

型号

public class Response
{
  public bool Success { get; set; }
  public T Data { get; set; }
  public IEnumerable Errors { get; set; }
}

public class ObjectResponse
{
  public string[]? leasingItems { get; set; }
  public string[]? suspectedItems { get; set; }
}

错误:

发生了一个或多个错误。 (无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.IEnumerable`1[Swip.Core.DTO.SwipSearchSuspect]' 因为该类型需要 JSON 数组(例如[1,2,3]) 正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径“data.leasingItems”,第 1 行,位置 39。)

内部异常 1: JsonSerializationException:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.IEnumerable`1[Swip.Core.DTO.SwipSearchSuspect]”,因为该类型需要 JSON 数组(例如 [1,2,3]) 以正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径“data.leasingItems”,第 1 行,位置 39。


【解决方案1】:

JSON 中的 data 属性是 ObjectResponse 对象,但不是 ObjectResponse 数组。

删除 IEnumerable<>

return JsonConvert.DeserializeObject>(result);