2016-07-18 15 views
1

HTTPレスポンス(text/xmlで):RestSharpを使用してクラス階層を逆シリアル化するにはどうすればよいですか?

<results> 
    <status code="ok"/> 
    <OWASP_CSRF_TOKEN> 
    <token>db8288c2e01a6e0caa5a9b52cc4570040b2714cc7a1f589670d6606d486ab98e</token> 
    </OWASP_CSRF_TOKEN> 
</results> 

私のC#のオブジェクトに:

[DeserializeAs(Name = "results")] 
public class Response 
{ 
    [DeserializeAs(Name = "status")] 
    public ResultStatus Status { get; set; } 

    public struct ResultStatus 
    { 
     [DeserializeAs(Name = "code")] 
     public string Code { get; set; } 
    } 
} 

internal class AuthenticationResponse : Response 
{ 
    [DeserializeAs(Name = "OWASP_CSRF_TOKEN")] 
    internal OWaspCsrfToken CsrfToken { get; set; } 

    internal struct OWaspCsrfToken 
    { 
     [DeserializeAs(Name = "token")] 
     internal string Token { get; set; } 
    } 
} 

ここでの目標はRestSharpは、コード内のオブジェクトへのHTTPレスポンスをデシリアライズすることです。ただし、何らかの理由で結果ステータスのCodeプロパティのみが正しく設定されています。 Tokenプロパティは常にnullです。このようなクラス階層でオブジェクトを逆シリアル化する適切な方法は何ですか?

答えて

0

問題は、internalを使用しています。私の推測では、プロパティ、クラス、およびinternalとマークされたメソッドは、実行時にリフレクションを使用して正しくスニッフィングできないということです。または、可能であれば、RestSharpは正しくこれを行う問題があるかもしれません。いずれにしても、これはうまくいきます:

public class AuthenticationResponse : Response 
{ 
    [DeserializeAs(Name = "OWASP_CSRF_TOKEN")] 
    public OWaspCsrfToken CsrfToken { get; set; } 

    public struct OWaspCsrfToken 
    { 
     [DeserializeAs(Name = "token")] 
     public string Token { get; set; } 
    } 
} 

EDIT:実際には、私は反射が内部の方法を見ることができると確信しています。問題は、RestSharpが内部プロパティのいずれかでsetメソッドを呼び出せないことでした。

関連する問題