Désérialiser XML avec RestSharp
-
12-12-2019 - |
Question
J'essaie RestSharp pour un projet WP7.J'ai quelques difficultés à désérialiser du XML avec RestSharp.L'objet est nul.Voici quelques-uns des fichiers XML pertinents :
<?xml version="1.0" encoding="utf-8"?>
<api_response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<response_data>
<employee_information>
<employee>
<employee_sf_name>David</employee_sf_name>
<employee_first_name>Dave</employee_first_name>
<employee_last_name>Jones</employee_last_name>
</employee>
</employee_information>
</response_data>
</api_response>
Et voici ma demande :
public static void executeRequest(Action<string> callback, string method)
{
var client = new RestClient();
var request = new RestRequest(Method.POST);
client.BaseUrl = App.url + method;
request.AddParameter("secret_key", Application.secret_key);
request.AddParameter("email", Application.email);
request.AddParameter("password", Application.password);
client.ExecuteAsync<Employee>(request, response =>
{
callback(response.Content); //prints the response as output
Debug.WriteLine("firstname " + response.Data.employee_first_name);
});
}
Et voici l'objet Employee :
public class Employee
{
public Employee() { }
public int employee_id { get; set; }
public String employee_first_name { get; set; }
public String employee_last_name { get; set; }
}
Puisque la réponse revient bien, j'ai essayé de la désérialiser dans une fonction distincte, mais sans succès :
public static void parse(string data)
{
Debug.WriteLine(data);
XmlDeserializer xml = new XmlDeserializer();
Employee employee = new Employee();
employee = xml.Deserialize<Employee>(new RestResponse() { Content = data });
Debug.WriteLine("last name " + employee.employee_last_name);
Debug.WriteLine("firstname " + employee.employee_first_name);
}
Merci d'avance si quelqu'un peut nous éclairer sur le problème.
La solution
Tout d'abord, l'étiquette de fermeture doit être une étiquette de fermeture.Après avoir réparé cela, j'ai installé une classe entourant:
public class employee_information
{
public Employee employee { get; set; }
}
Alors gardé votre classe d'employés d'origine:
public class Employee
{
public Employee() { }
public int employee_id { get; set; }
public String employee_first_name { get; set; }
public String employee_last_name { get; set; }
}
Puis, pour désérialiser le:
var empInfo = xml.Deserialize<employee_information>((new RestResponse() {Content = data}));
Autres conseils
Ajouter request.RootElement = "employee";
devrait fonctionner avec votre code existant.Si vous ne souhaitez pas commencer aussi loin dans l'arborescence, vous devez créer des classes qui correspondent à l'ensemble de la hiérarchie.