[英]c# using generic method
我想知道如何解決以下問題:
我有一個返回響應數據的通用方法。
public class Request
{
public T PostRequest<T>(string Ressource, T ObjTOPost) where T : new()
{
var request = new RestRequest(Ressource, Method.POST);
var client = new RestClient("https://api.net/api/v1/");
request.XmlSerializer = new RestSharp.Serializers.XmlSerializer();
request.RequestFormat = DataFormat.Xml;
request.AddXmlBody(ObjTOPost, "http://api.net");
var response = client.Execute<T>(request);
return response.Data;
}
}
當我這樣調用方法時,它說LoginXML無法轉換為UserXML。 我不明白為什么,因為LoginXML是僅用於序列化我的職位屬性的參數。
var login = new LoginXML();
login.username = tbUsername.Text;
login.password = tbPassword.Text;
Request req = new Request();
UserXML user = req.PostRequest("sessions", login);
這是我的LoginXML和UserXML
[SerializeAs(Name = "login")]
public class LoginXML
{
private string user;
private string pw;
private string ID;
[DeserializeAs(Name = "id")]
public string sessionID { get; set; }
[SerializeAs(Name = "username")]
public string username
{
get
{
return this.user;
}
set
{
this.user = value.Trim();
}
}
[SerializeAs(Name = "password")]
public string password
{
get { return this.pw; }
set { this.pw = value.Trim(); }
}
}
public class UserXML
{
private string ID;
[DeserializeAs(Name = "id")]
public string sessionID {get;set;}
}
public T PostRequest<T>(string Ressource, T ObjTOPost) where T : new()
您的PostRequest
返回類型為T
,類似於T ObjTOPost
。 由於您將LoginXML
實例傳遞給LoginXML
req.PostRequest("sessions", login);
假設您的返回類型也都是LoginXML
因為它們都是T。
public T PostRequest<T>(string Ressource, T ObjTOPost) where T : new()
{
// Some code
return response.Data;
}
在這里,您嘗試返回從其余請求中檢索到的數據,它是UserXML類型。 但是,在這種情況下,您的方法返回類型為LoginXML
但是您返回的是UserXML
對象,因此會出現錯誤。
一種方法是簡單地返回對象,但它需要強制轉換每個對象,並且存在可能導致異常的不良強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.