Asp.NET HttpClient与自定义JsonConverter

时间:2015-06-24 18:38:33

标签: c# json deserialization json-deserialization

您好我有以下代码从REST服务获取数据:

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

    }

我从REST服务获得的jSON是:

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

我想将jSON映射到我的CatalogInfo类,有没有办法做到这一点?

1 个答案:

答案 0 :(得分: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();