无法反序列化json数组对象

时间:2019-09-17 16:27:53

标签: c# json deserialization

我正在使用中的一个API,该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);

1 个答案:

答案 0 :(得分:0)

JSON属性名称和非数字值应位于“”(双引号)中,而不应位于“”(双引号)中。

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

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

和chang类型的反序列化方法:

JsonConvert.DeserializeObject<ResultModel>(data);

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

JArray jJobs = JArray.Parse(json);

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