C# 如何将JSON从Web API反序列化到类

C# 如何将JSON从Web API反序列化到类,c#,json,dotnet-httpclient,C#,Json,Dotnet Httpclient,因此,我是JSON的初学者,很难将它从web API放到类中。我用邮递员做到了这一点: { "$id": "1", "id": 1, "name": "Quick Entry", "description": "General", "trackerNumber": 1, "taskType": 0, "priority": 1, "status": 0, "isRecurring": 1, "clientVisib

因此,我是JSON的初学者,很难将它从web API放到类中。我用邮递员做到了这一点:

 {
    "$id": "1",
    "id": 1,
    "name": "Quick Entry",
    "description": "General",
    "trackerNumber": 1,
    "taskType": 0,
    "priority": 1,
    "status": 0,
    "isRecurring": 1,
    "clientVisibility": null,
    "dateCreated": "2015-05-04T11:45:58.867",
    "dateModified": "2017-03-29T11:51:52.007",
    "modifiedBySessionId": "f1a96bf3-7e08-4d44-b8a2-5eacf0adab01",
    "hours": null,
    "deliveryDate": null,
    "discriminator": "",
    "assignedToUserId": null,
    "projectId": 1,
    "clientId": 1,
    "sortOrder": 4,
    "isDeleted": false,
    "folder": "33f16cea-7fb4-e511-80db-00155d001801",
    "taskGroupId": 1,
    "isNew": false
}
“task”是我创建的类的名称。这是我的代码:

using (var httpClient = new HttpClient { BaseAddress = new Uri("http://localhost:45552/") })
{
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
    var test = await httpClient.GetStringAsync("api/Tasks/1");

    //task = JsonConvert.DeserializeObject<TaskInfo>(test);

    Console.WriteLine(task.Name);
    Console.ReadKey();
}
当我试图打印我的任务类时,会出现以下错误:
“将值{null}转换为类型'System.Int32'时出错。路径'clientVisibility',第1行,位置157。”

您的问题是,您在C#类中将
clientVisibility
声明为
int
而不是可为null的
int
。应该是这样的:

[JsonProperty(PropertyName = "clientVisibility")]
public int? ClientVisibility { get; set; }
在JSON中,将属性作为null传递:

"clientVisibility": null

因此,C#class属性必须能够接受空值,正如我上面所示。这同样也适用于必须接受
null
的任何其他
int
属性,例如
Hours

是否有表示JSON的类?是的。因此,请取消对此行的注释
task=JsonConvert.DeserializeObject(test)这正是将字符串反序列化为已知类型的方法。我尝试过这样做,并尝试从该类中打印一些内容,但没有成功。我将为JSON添加我的类“它不工作”——为什么它不工作?我们需要详细信息来尝试和诊断您遇到的问题
"clientVisibility": null