2016-02-24 3 views
3

Я прочитал различные вопросы, заданные здесь по этому вопросу, и я все еще не ближе к решению моей проблемы.Deserializing XML Response using RestSharp

Я пытаюсь Deserialize этот ответ 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></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; } 
} 

Однако я только когда-либо возвращаться нуль и 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

+0

TextvID имеет несовместимый корпус в XML и код атрибута.Незначительные и, вероятно, не актуальны, но вы все равно должны это исправить. – Marcel

ответ

1

Я сделал несколько изменений и может заставить его работать:

Возможно, опечатка в вопросе, но что-то я должен был изменить это автор XML является недействительным:

<InvalidNo_2></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); 

Наконец я заметил Код ссылки предназначается, чтобы быть целым числом в классе, но возвращаемое значение не является (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; 
} 
0

Использование Restsharp я обычно делаю другой подход, но я в основном работаю с JSON. Используется ли это с помощью MVC web api?

Я бы создал клиент типа IRestClient, где я бы установил URL-адрес 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<> сам, но эта ссылка должна надеяться, поможет