2017-07-21 20 views
1

にデシリアライズする方法については、私はJSONの初心者ですが、Web APIのクラスに入れるのは苦労しています。私はこれまでこれを得るために郵便配達員を使いました: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(); 
} 

私はどのように逆シリアル化するのか分かりません。

class TaskInfo 
{ 

    [JsonProperty(PropertyName = "id")] 
    public int Id { get; set; } 

    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "description")] 
    public string Description { get; set; } 

    [JsonProperty(PropertyName = "trackerNumber")] 
    public int TrackerNumber { get; set; } 

    [JsonProperty(PropertyName = "taskType")] 
    public int TaskType { get; set; } 

    [JsonProperty(PropertyName = "priority")] 
    public int Priority { get; set; } 

    [JsonProperty(PropertyName = "status")] 
    public int Status { get; set; } 

    [JsonProperty(PropertyName = "isRecurring")] 
    public int IsRecurring { get; set; } 

    [JsonProperty(PropertyName = "clientVisibility")] 
    public int ClientVisibility { get; set; } 

    [JsonProperty(PropertyName = "dateCreated")] 
    public DateTime DateCreated { get; set; } 

    [JsonProperty(PropertyName = "dateModified")] 
    public DateTime DateModified { get; set; } 

    [JsonProperty(PropertyName = "modifiedBySessionId")] 
    public string ModifiedBySessionId { get; set; } 

    [JsonProperty(PropertyName = "hours")] 
    public int Hours { get; set; } 

    [JsonProperty(PropertyName = "deliveryDate")] 
    public DateTime DeliveryDate { get; set; } 

    [JsonProperty(PropertyName = "discriminator")] 
    public string Discriminator { get; set; } 

    [JsonProperty(PropertyName = "assignedToUserId")] 
    public int AssignedToUserId { get; set; } 

    [JsonProperty(PropertyName = "projectId")] 
    public int ProjectId { get; set; } 

    [JsonProperty(PropertyName = "clientId")] 
    public int ClientId { get; set; } 

    [JsonProperty(PropertyName = "sortOrder")] 
    public int SortOrder { get; set; } 

    [JsonProperty(PropertyName = "isDeleted")] 
    public bool IsDeleted { get; set; } 

    [JsonProperty(PropertyName = "folder")] 
    public int Folder { get; set; } 

    [JsonProperty(PropertyName = "taskGroupId")] 
    public int TaskGroupId { get; set; } 

    [JsonProperty(PropertyName = "isNew")] 
    public bool IsNew { get; set; } 

} 

そして、私は私のタスククラスを印刷しようとすると、それは私に、このエラーを与える:。 「変換エラー値{ヌル} 『可能System.Int32』と入力するパス「clientVisibility

マイJSONクラス

'、1行目、157位。

+0

JSONを表すクラスがありますか? – maccettura

+0

はい。 – Marq

+2

このように 'task = JsonConvert.DeserializeObject (test);という行のコメントを外してください。文字列を既知の型に逆シリアル化する方法はありますか? – maccettura

答えて

2

あなたの問題は、intとしてClientVisibilityをC#クラスに宣言しました.intは無効です。したがって、C#クラスのプロパティは、私が上に示してきたようにnull値を受け入れることができなければなりません

"clientVisibility": null 

:あなたのJSONで

[JsonProperty(PropertyName = "clientVisibility")] 
public int? ClientVisibility { get; set; } 

あなたはヌルとしてプロパティを渡す:それはこのようにする必要があります。受け入れる必要がある他のプロパティにも同じことが適用されます。Hours

関連する問題