簡體   English   中英

C#使用泛型方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM