Pregunta

Estoy probando RestSharp para un proyecto WP7.Tener algunos problemas deserializando un poco de XML con RestSharp.El objeto es nulo.Aquí hay algunos de los XML relevantes:

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

y aquí está mi solicitud:

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

y aquí está el objeto del empleado:

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

}

Dado que la respuesta vuelve bien, intenté deserializarlo en una función separada, pero sin éxito:

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

    }

Gracias de antemano si alguien puede arrojar algo de luz sobre el tema.

¿Fue útil?

Solución

primero, la etiqueta de cierre debe ser una etiqueta de cierre.Después de arreglarlo, configuro una clase adjunta:

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

luego mantuvo su clase de empleado original:

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

}

entonces, para deserializarlo:

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

Otros consejos

Agregar request.RootElement = "employee"; debe funcionar con su código existente.Si no quiere comenzar tan lejos del árbol, necesita crear clases que coincidan con toda la jerarquía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top