我有這樣定義這個簡單的模型類:我有這個網頁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