2016-07-18 35 views
1

HTTP響應(文/ 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; } 
    } 
} 

編輯:其實,我很肯定反射可以看到內部方法。問題是RestSharp無法在任何內部屬性上調用set方法。

相關問題