簡體   English   中英

RestSharp:將Xml反序列化為c#對象返回null

[英]RestSharp: Deserialize Xml to c# Object return null

我有一些api的xml:

<auditypes>
     <auditype code="a" description="aaa"/>
     <auditype code="b" description="bbb"/>
     <auditype code="c" description="ccc"/>
     <auditype code="d" description="ddd"/>
     <auditype code="e" description="eee"/>
</auditypes>

和映射為C#類中的對象:

    public class auditypes
    {
        public List<auditype> auditype { get; set; }
    }

    public class auditype
    {
        public string code { get; set; }
        public string description { get; set; }
    }

我用這個函數來稱呼它:

    public List<auditypes> Execute<auditypes>(RestRequest request) where auditypes : new()
    {
        var client = new RestClient();
        client.BaseUrl = "https://www.myurl.com/auditypes";
        var response = client.Execute<auditypes>(request);

        return response.Data as List<auditypes>;
    }

    public List<auditypes> GetCall()
    {
        var request = new RestRequest();
        request.RequestFormat = DataFormat.Xml;
        request.RootElement = "auditype";
        return Execute<auditypes>(request);
    }

但是它總是返回null,有人知道為什么會這樣嗎?

傳遞給Execute<T>的通用參數是應由RestSharp庫反序列化的類型。 這意味着您的response.Data屬性已經是T類型,在您的情況下是auditypes 但是,當您return ,嘗試將其List<auditypes>不存在此類List<auditypes>轉換的List<auditypes>

另外,不需要類型約束,因為您的方法不是通用的,因為它接受顯式類型。

重構您的方法:

public auditypes Execute<auditypes>(RestRequest request)
{
    var client = new RestClient();
    client.BaseUrl = "https://www.myurl.com/auditypes";
    var response = client.Execute<auditypes>(request);

    return response.Data;
}

最后,它對我有用:)

public auditypes Execute<auditypes>(RestRequest request) where auditypes : new()
{
    var client = new RestClient();
    client.BaseUrl = "https://www.myurl.com/auditypes";
    var response = client.Execute<auditypes>(request).Data;

    return response;
}

public auditypes GetCall()
{
    var request = new RestRequest();
    request.RequestFormat = DataFormat.Xml;
    return Execute<auditypes>(request);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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