2015-06-24 5 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, что Im получая от служба REST является:

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

Я хочу, чтобы отобразить JSon к моему CatalogInfo класса, есть способ т 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(); 
Смежные вопросы