2017-09-29 125 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