【问题标题】:Not able to deserialize json array object无法反序列化 json 数组对象
【发布时间】:2019-09-17 16:27:53
【问题描述】:

我正在使用 中的一个 api,它返回一个我想反序列化的 json 数组,以便使用 Newtonsoft 的 JsonConvert.DeserializeObject 列出,但不知何故它没有被反序列化。

Web API 结果

[{
  'JobID': '5d7ff7c393c3511a9c165caa',
  'Name': '3dsmax-Demo-v2019 [BATCH MASTER]',
  'Date': '16.09.2019 23:59:45',
  'Frames': '1',
  'Status': 'Completed',
  'Priorty': 1,
  'Credit': '0,0327',
  'Estimated': '0,0654',
  'Progress': '100 %   (1/1)',
  'Cpu': '0'
} {
  'JobID': '5d80150b8b9da7134c7f7972',
  'Name': 'restoran [View01] (BATCH 1 of 13)',
  'Date': '17.09.2019 02:02:56',
  'Frames': '0',
  'Status': 'Completed',
  'Priorty': 1,
  'Credit': '1,1622',
  'Estimated': '2,3244',
  'Progress': '100 %   (1/1)',
  'Cpu': '0'
}]

C#模型类

public class JobModel
{
    public string JobID { get; set; }

    public string Name { get; set; }

    public string Date { get; set; }

    public string Frames { get; set; }

    public string Status { get; set; }

    public string Priorty { get; set; }

    public string Credit { get; set; }

    public string Estimated { get; set; }

    public string Progress { get; set; }

    public string Cpu { get; set; }
}

我尝试使用以下方法来完成它

string data = await responseMessage.Content.ReadAsAsync<string>();
var jobs = JsonConvert.DeserializeObject<List<JobModel>>(data);

【问题讨论】:

  • 有例外吗?请发布一些详细信息。
  • 对象之间的 api 结果中似乎缺少逗号。我认为这不是因为我的清理造成的,是您的复制粘贴错误吗?
  • 您的 JSON 格式错误。外部数组中的两个对象之间应该有一个,'Cpu': '0' }, { 'JobID': '5d80150b8b9da7134c7f7972',。演示:dotnetfiddle.net/dyzeko。固定:dotnetfiddle.net/umBeWC
  • 正是...您的 JSON 中有错误。下次,不要在 StackOverflow 上发布,只需将您的 JSON 剪切并粘贴到 jsonlint.com 中,这将告诉您您的 JSON 是否有效。如果它不是......那么......在你修复它之前你不会走得太远。
  • 不,你可以让他们意识到这一点。我的意思是,您当然可以自己进行一些手动编辑,但这很容易出错。您可以删除开始 [ 和结束 ] 并拆分 } {,然后单独解析每个结果,但就像我说的那样,这很容易出错

标签: winforms c# json deserialization


【解决方案1】:

JSON 属性名称和非数字值应使用 ""(双引号)而不是 ''(单引号)。

使用另一个类来包装 JobModel 的集合(这是一个很好的做法,但 json 也应该更改),例如:

class ResultModel
{
   public ICollection<JobModel> Jobs { get; set; }
}
// JSON:
{
   "Jobs": [
   {
    // class properties with values
   },
   {
    // class properties with values
   }]
}

反序列化方法的更改类型:

JsonConvert.DeserializeObject<ResultModel>(data);

如果您无法更改 JSON,请使用 JArray:

JArray jJobs = JArray.Parse(json);

并将 JObject 的 JProperties 映射到您的类上。

【讨论】:

    猜你喜欢
    • 2022-07-05
    • 1970-01-01
    • 2016-12-30
    • 2014-08-04
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多