2016-07-18 6 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; } 
    } 
} 

EDIT: На самом деле, я уверен, что отражение может видеть внутренние методы. Проблема заключалась в том, что RestSharp не может вызывать метод set для любого из внутренних свойств.

 Смежные вопросы

  • Нет связанных вопросов^_^