0

WP7 プロジェクトで RestSharp を試しています。RestSharp を使用して一部の XML を逆シリアル化する際に問題が発生しました。オブジェクトがヌルです。関連する 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);
        });
    }

従業員オブジェクトは次のとおりです。

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

    }

誰かがこの問題に光を当てることができれば、事前に感謝します。

4

2 に答える 2

4

まず、終了タグは終了タグである必要があります。それを修正した後、囲んでいるクラスを設定しました。

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}));
于 2012-05-22T12:33:48.043 に答える
1

追加request.RootElement = "employee";は既存のコードで機能するはずです。ツリーのずっと下から始めたくない場合は、階層全体に一致するクラスを作成する必要があります。

于 2012-05-22T17:54:12.477 に答える