您好我有以下代码从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
类,有没有办法做到这一点?
答案 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();