Asp.NET HttpClient与自定义JsonConverter

本文关键字:自定义 JsonConverter HttpClient NET Asp | 更新日期: 2023-09-27 17:59:36

Hi我有以下代码从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类,有办法做到这一点吗?

Asp.NET HttpClient与自定义JsonConverter

这里最简单的选项是使用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();