我有这样定义这个简单的模型类:我有这个网页API,返回CountryLanguage的IEnumerable存储结果
public class CountryLanguage
{
public string Name { get; set; }
public string ShortName { get; set; }
public string Description { get; set; }
}
:
[HttpGet]
public IEnumerable<CountryLanguage> Get()
{
List<CountryLanguage> list = new List<CountryLanguage>();
list.Add(new CountryLanguage());
list.Add(new CountryLanguage());
return list;
}
我有这个类,我想存储Web API调用的结果:
public class ResponseResult<T>
{
public HttpStatusCode StatusCode { get; set; }
public string Message { get; set; }
public T Payload { get; set; }
}
最后,我在这里是代码调用Web API:
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, actionToCallWithParameters);
var response = httpClient.SendAsync(request).Result;
ResponseResult<T> responseResult = new ResponseResult<T>();
responseResult.StatusCode = response.StatusCode;
responseResult.Message = response.Content.ReadAsStringAsync().Result;
responseResult.Payload = response.Content.ReadAsAsync<T>().Result;
return responseResult;
如果Web API返回CountryLanguage对象,我得到这个存储对象到我的泛型类型物业的有效载荷没有问题。
但如果Web API返回一个IEnumerable,我得到这个错误:
不能反序列化JSON当前阵列(例如[1,2,3])转换成式“CountryLanguage”,因为类型要求JSON对象(例如{\“name \”:\“value \”})来正确反序列化。要修复这个错误,可以将JSON更改为JSON对象(例如{\“name \”:\“value \”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList)像List,可以从JSON数组中反序列化。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。
我的问题是:是否有可能“正常化”此代码,所以我可以存储一个对象或IEnumerable到我的有效载荷属性的T型?
是的你是对的。但是,您能想出任何可以将对象或IEnumerable的结果存储到一个泛型类型变量中的方法吗? – Elferone
是的,如果您使用“对象”类型声明有效载荷,则可以在其中存储任何内容。但是拆开它以后再使用会遇到很多麻烦。如果我是你,我会将Payload设置为列表列表。然后,我会让服务总是返回一个List 对象,即使只填充了一个索引。 –
LcSalazar