2017-09-29 191 views
0

我從REST API獲取下面的JSON響應。無法反序列化C中的JSON#

{ 
    "data":{ 
     "id":123, 
     "zoneid":"mydomain.com", 
     "parent_id":null, 
     "name":"jaz", 
     "content":"172.1 6.15.235", 
     "ttl":60, 
     "priority":null, 
     "type":"A", 
     "regions":[ 
     "global" 
     ], 
     "system_record":false, 
     "created_at":"2017-09-28T12:12:17Z", 
     "updated_at":"2017-09-28T12:12:17Z" 
    } 
} 

並試圖解決使用下面的代碼,但不會導致正確的反序列化類型。

var model = JsonConvert.DeserializeObject<ResponseModel>(response);   

下面是根據我在JSON響應中收到的字段的類。

public class ResponseModel 
{ 
    public int id { get; set; } 
    public string zone_id { get; set; } 
    public int parent_id { get; set; } 
    public string name { get; set; } 
    public string content { get; set; } 
    public int ttl { get; set; } 
    public int priority { get; set; } 
    public string type { get; set; } 
    public string[] regions { get; set; } 
    public bool system_record { get; set; } 
    public DateTime created_at { get; set; } 
    public DateTime updated_at { get; set; } 

} 

缺少什麼?

回答

2

你錯過了一個包裝類。

public class Wrapper 
{ 
    public ResponseModel data {get;set} 
} 

然後執行:

var model = JsonConvert.DeserializeObject<Wrapper>(response).data; 

讓你ResponseModel出data屬性的實例。

您可以從您的JSON扣除此:

{ "data": 
    { "id":123, /*rest omitted */ } 
} 

將收到此JSON的類型需要有一個名爲data屬性。建議的Wrapper類用作該類型。

2

根據json2csharp網站,您的模型似乎不正確。試試這個:

public class ResponseModel 
{ 
    public int id { get; set; } 
    public string zoneid { get; set; } 
    public object parent_id { get; set; } 
    public string name { get; set; } 
    public string content { get; set; } 
    public int ttl { get; set; } 
    public object priority { get; set; } 
    public string type { get; set; } 
    public List<string> regions { get; set; } 
    public bool system_record { get; set; } 
    public DateTime created_at { get; set; } 
    public DateTime updated_at { get; set; } 
} 

public class RootObject 
{ 
    public ResponseModel data { get; set; } 
} 
1

您的模型不符合您的迴應 - 它data屬性相匹配。簡單地包裝其他物體的圓它

public class ResponseData 
{ 
    public ResponseModel Data {get; set; { 
} 

然後

var model = JsonConvert.DeserializeObject<ResponseData>(response); 
1

這裏一個很酷的技巧,你可以在Visual Studio 2015 - 2017年在那裏產生,如果你剛纔複製的JSON的正確的類(做CTRL + c)。

您需要在visual studio中創建一個新類,並且一旦進入類內部,請轉到編輯菜單 - >選擇性粘貼 - >將JSON粘貼爲類。

Steps to generate json class

,這將產生一個JSON適合你的C#對象,並保存你所有的麻煩:)

+0

很好的把戲。和json2csharp一樣,但在IDE中。謝謝 – OrcusZ