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
类,有办法做到这一点吗?
这里最简单的选项是使用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();