2016-08-18 3 views
0

Я пытаюсь десериализовать следующий текст JSON в класс C# с помощью JSON.Net.Deserializing JSON с json.net

{ 
"jsonrpc": "2.0", 
"result": [{ 
    "groupid": "5", 
    "name": "Discovered hosts", 
    "internal": "1", 
    "flags": "0" 
}, { 
    "groupid": "7", 
    "name": "Hypervisors", 
    "internal": "0", 
    "flags": "0" 
}, { 
    "groupid": "2", 
    "name": "Linux servers", 
    "internal": "0", 
    "flags": "0" 
}, { 
    "groupid": "8", 
    "name": "Network Gear", 
    "internal": "0", 
    "flags": "0" 
}, { 
    "groupid": "1", 
    "name": "Templates", 
    "internal": "0", 
    "flags": "0" 
}, { 
    "groupid": "6", 
    "name": "Virtual machines", 
    "internal": "0", 
    "flags": "0" 
}, { 
    "groupid": "4", 
    "name": "Zabbix servers", 
    "internal": "0", 
    "flags": "0" 
}], 
"id": 2 

}

Классы следующим образом:

public class getHostsResponse 
    { 
     public string jsonrpc { get; set; } 
     public List<getHostsRecord> hostlist { get; set; } 
     public int id { get; set; } 
    } 

    public class getHostsRecord 
    { 
     public string groupid { get; set; } 
     public string name { get; set; } 
     public string internala { get; set; } 
     public string flags { get; set; } 
    } 

Заявление Deserialize является:

getHostsResponse response2 = JsonConvert.DeserializeObject<getHostsResponse>(response); 

В jsonrpc и идентификаторы полей десериализации правильно, но поле Список_адресов является ноль.

У меня есть классы (в частности, gethostrecords) неправильно настроенные для получения десериализованного потока?

Спасибо.

Bryan Hunt

ответ

0

Да, имена свойств в классах должны соответствовать JSON (или же вам нужно использовать [JsonProperty] атрибуты на каждое свойство, чтобы указать имя JSON, где они отличаются).

Измените название hostlist собственности в вашем getHostsResponse классе на result и он должен начать работать. Вы также ошибочно написали internal в getHostsRecord как internala.

Переработанные следующие классы:

public class getHostsResponse 
{ 
    public string jsonrpc { get; set; } 
    public List<getHostsRecord> result { get; set; } 
    public int id { get; set; } 
} 

public class getHostsRecord 
{ 
    public string groupid { get; set; } 
    public string name { get; set; } 
    public string internal { get; set; } 
    public string flags { get; set; } 
} 

Или, используя [JsonProperty] подход:

public class getHostsResponse 
{ 
    public string jsonrpc { get; set; } 
    [JsonProperty("result")] 
    public List<getHostsRecord> hostlist { get; set; } 
    public int id { get; set; } 
} 

public class getHostsRecord 
{ 
    public string groupid { get; set; } 
    public string name { get; set; } 
    public string internal { get; set; } 
    public string flags { get; set; } 
} 
+0

ARGH. Вот и все. Я сопоставил все имена элементов, не понимал, что мне нужно сделать это для имени массива. Спасибо, что указал на Брайана. –

+0

Не беспокойтесь; Рад, что смог помочь. –

Смежные вопросы