2012-05-22 3 views
0

Я пытаюсь RestSharp для проекта WP7. Имея некоторые проблемы десериализации некоторых XML с RestSharp. Объект имеет значение NULL. Вот некоторые из соответствующего XML:Deserializing XML с RestSharp

<?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> 

А вот моя просьба:

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); 
     }); 
    } 

А вот объект 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; } 

} 

Поскольку ответ возвращается в порядке, я попробовал десериализации его в отдельную функцию, но безуспешно:

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

    } 

Спасибо заранее, если кто-то может пролить свет на проблему.

+0

Есть ли отсутствующий XML-заголовок или вы просто не включили его выше? –

+0

@MattLacey Он просто не включался. Я отредактировал мой вопрос и добавил его. – joe

ответ

3

Прежде всего, закрывающий тег должен быть закрывающим тегом. После того, как я установил, что я создал класс ограждающую:

public class employee_information 
{ 
    public Employee employee { get; set; } 
} 

Затем сохранил свой первоначальный класс 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; } 

} 

Затем десериализовать его:

var empInfo = xml.Deserialize<employee_information>((new RestResponse() {Content = data})); 
+0

Это работает. Спасибо. – joe

1

Добавление request.RootElement = "employee"; должно работать с вашим существующим кодом. Если вы не хотите начинать так далеко от дерева, вам нужно создать классы, соответствующие всей иерархии.

+0

Спасибо за ответ Джон, но у меня все те же результаты, что и раньше. – joe