2016-08-18 146 views
0

我想將下面的JSON文本反序列化爲使用JSON.Net的C#類。用json.net反序列化JSON

{ 
"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; } 
    } 

的反序列化的說法是:

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

的jsonrpc和id字段反序列化正確,但主機列表場空值。

我是否有類(特別是gethostrecords)設置不正確以接收反序列化的流?

謝謝。

布賴恩·亨特

回答

0

是,在你的類的屬性名稱需要匹配的JSON(或其他你需要使用的每個屬性[JsonProperty]屬性來表示它們的不同的JSON名)。

將您的getHostsResponse類中的hostlist屬性的名稱更改爲result,它應該開始工作。您還將getHostsRecord中的internal屬性拼寫爲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

哎呀。就是這樣。我匹配所有的元素名稱,沒有意識到我也需要爲數組名稱做這件事。感謝您指出了布賴恩。 –

+0

不用擔心;很高興我能幫上忙。 –