c# 使用泛型方法
c# using generic method
我想知道如何解决以下问题:
我有一个 return 响应数据的通用方法。
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 是仅用于为 post 请求序列化我的属性的参数。
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
return 类型是 T
,类似于 T ObjTOPost
。由于您将 LoginXML
实例传递给 req.PostRequest("sessions", login);
它会假设您的 return 类型也将是 LoginXML
因为它们都是 T.
public T PostRequest<T>(string Ressource, T ObjTOPost) where T : new()
{
// Some code
return response.Data;
}
您在这里尝试 return 从您的 UserXML 类型的其余请求中检索到的数据。但是在这种情况下,你的方法 return 类型是 LoginXML
但你 returning 一个 UserXML
对象,因此错误。
一种方法是简单地 return 对象,但它需要转换每个对象的麻烦,并且可能会有导致异常的错误转换。
我想知道如何解决以下问题:
我有一个 return 响应数据的通用方法。
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 是仅用于为 post 请求序列化我的属性的参数。
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
return 类型是 T
,类似于 T ObjTOPost
。由于您将 LoginXML
实例传递给 req.PostRequest("sessions", login);
它会假设您的 return 类型也将是 LoginXML
因为它们都是 T.
public T PostRequest<T>(string Ressource, T ObjTOPost) where T : new()
{
// Some code
return response.Data;
}
您在这里尝试 return 从您的 UserXML 类型的其余请求中检索到的数据。但是在这种情况下,你的方法 return 类型是 LoginXML
但你 returning 一个 UserXML
对象,因此错误。
一种方法是简单地 return 对象,但它需要转换每个对象的麻烦,并且可能会有导致异常的错误转换。