2012-05-22 47 views
0

我试用了一个WP7项目的RestSharp。在使用RestSharp反序列化一些XML时遇到一些麻烦。该对象为空。下面是一些相关的XML的:使用RestSharp反序列化XML

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

感谢John的回应,但我仍然得到了和以前一样的结果。 – joe