如何使用 RestSharp 反序列化类层次结构

本文关键字:层次结构 反序列化 RestSharp 何使用 | 更新日期: 2023-09-27 17:57:28

HTTP 响应 (text/xml(:

<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 。像这样反序列化类层次结构中的对象的正确方法是什么?

如何使用 RestSharp 反序列化类层次结构

问题在于使用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 方法。