簡體   English   中英

使用RestSharp反序列化XML響應

[英]Deserializing XML Response using RestSharp

我已經閱讀了關於這個主題已經提出的各種問題,我仍然沒有更接近解決我的問題。

我試圖反序列化這個xml響應:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
   <SubmissionResult>
     <Result>ACCEPTED</Result>
       <SubmissionID>
         <RefNo>77587-1425386500</RefNo>
         <Submitted>9</Submitted>
         <ValidNo>7</ValidNo>
         <InvalidNo>2</InvalidNo>
         <InvalidNo_1>08452782055</InvalidNo_1>
         <InvalidNo_2>01234567890</InvalidNo_1>
         <TextvID>77587-1425386500</TextvID>
       </SubmissionID>
     <Credits>999999</Credits>
   </SubmissionResult> 

使用這些類:

[XmlRoot ("SubmissionResult")]
public class SubmissionResult
{
    [XmlElement ("Result")]
    public string Result { get; set; }
    public SubmissionID SubmissionID { get; set; }
    [XmlElement("Credits")]
    public int Credits { get; set; }
}

public class SubmissionID
{
    [XmlElement("RefNo")]    
    public int RefNo { get; set; }
    [XmlElement("Submitted")]    
    public int Submitted { get; set; }
    [XmlElement("ValidNo")]    
    public int ValidNo { get; set; }
    [XmlElement("TextVID")]    
    public string TextVID { get; set; }
}

但是我只返回null和0值,我認為這是默認值。

以下是獲取結果並希望反序列化的代碼:

try
{
    var request = new RestRequest();
    request.RequestFormat = DataFormat.Xml;
    request.Resource = APIURL;
    request.RootElement = "SubmissionResult";

    SubmissionResult r = Execute<SubmissionResult>(request);
}

public static T Execute<T>(RestRequest request) where T : new()
{
     var client = new RestClient();
         client.BaseUrl = new  Uri("https://www.textvertising.co.uk/_admin/api", UriKind.Absolute);

     var response = client.Execute<T>(request);

     return response.Data;
}

非常感謝您提供的任何幫助。

CS

我做了一些改動,可以使它工作:

可能是問題中的拼寫錯誤,但我必須改變的是發布的XML無效:

<InvalidNo_2>01234567890</InvalidNo_1>

我知道您希望使用.NET XMLSerializer,因為您使用了XmlRoot和XmlElement注釋,因此您必須覆蓋RestSharp附帶的默認注釋,如下所示:

request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();

此外,我不得不刪除RootElement設置,該設置與.NET序列化程序不能很好地匹配,因此刪除了以下行:

request.RootElement = "SubmissionResult";   

所以我的版本成了:

var request = new RestRequest();
request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
request.RequestFormat = DataFormat.Xml;
// request.Resource = APIURL;

SubmissionResult r = Execute<SubmissionResult>(request);

最后我注意到RefNo在類中是整數,但返回的值不是(77587-1425386500)所以我把它作為一個字符串:

[XmlElement("RefNo")]
public string RefNo { get; set; }

我在mocky.io上創建了一個模擬響應,經過測試,看起來工作得很好:

public static T Execute<T>(RestRequest request) where T : new()
{
    var client = new RestClient();
    client.BaseUrl = new Uri("http://www.mocky.io/v2/56cd88660f00009800d61ff8", UriKind.Absolute);

    var response = client.Execute<T>(request);

    return response.Data;
}

使用Restsharp我通常采用不同的方法,但我主要使用JSON。 這是使用MVC web api嗎?

我將創建一個類型IRestClient的客戶端,我將設置API網址和一些標題。 我會用的,

var response = client.Post<T>(DataFormat.Json, "admin/api", content); 
if(response.Data != null)
//populate T object with data

如果你能提供一些你正在打電話的網絡服務方法的更多信息..這將有助於謝謝:)祝你好運...

看看這個http://restsharp.org/老實說,我從來沒有使用過RestClient.Execute<>我自己,但這個鏈接應該有希望幫助

暫無
暫無

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

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