2015-06-24 23 views
0

嗨,我有以下代码从一个REST服务数据:Asp.NET HttpClient的定制JsonConverter

HttpResponseMessage response; 
        response = client.GetAsync("CatalogUpdate/" + sessionId).Result; 

        if (response.IsSuccessStatusCode) 
        { 
         catalogs = response.Content.ReadAsAsync<List<Models.CatalogInfo>>().Result; 
        } 

我CatalogInfo类是:

public class CatalogInfo 
    { 
     public CatalogInfo(int id,string name,string date) 
     { 
      this.ID = id; 
      this.Name = name; 
      this.Date = date; 

     } 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public string Date { get; set; } 

    } 

并且json,即时通讯从得到REST服务是:

{"error":false,"locations":[{"ID":"3","ABC":"XC","Description":"Rome","Status":"1"},{"ID":"4","CD1":"XH","Description":"Italy","Status":"1"}]} 

我想将JSON映射到我的CatalogInfo类,是有T A方式o这样做?

+0

你怎么想*地图*考虑到他们有不同的属性,似乎无关? – Lloyd

+0

我想用ID和名称来映射ID – VAAA

+0

这个[问题] [1]看起来与您正在寻找的相似。 [1]:http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object – Anushree

回答

1

这里最简单的方法是使用Json.NET和创建代表预期JSON类,因此,例如:

class Location 
{ 

    public string ID { get; set; } 
    public string Description { get; set; } 
} 

class JSONResponse 
{ 

    [JsonProperty("error")] 
    public bool Error { get; set; } 

    [JsonProperty("locations")] 
    public Location[] Locations { get; set; } 

} 

我们并没有实现所有的财产Json.NET将只忽略那里不存在的东西。

然后反序列化响应。在你的情况你使用HttpResonseMessage所以是这样的:

JSONResponse response = JsonConvert.DeserializeObject<JSONResponse>(
    await response.Content.ReadAsStringAsync() 
); 

然后可以使用LINQ到的位置转换到你的对象:

CatalogInfo[] catalog = response.Locations.Select(loc => new CatalogInfo(
    loc.ID, 
    loc.Description, 
    String.Empty 
)).ToArray();