【问题标题】:Deserialization using restsharp - I tried the documentation but it did not work使用 restsharp 反序列化 - 我尝试了文档,但没有用
【发布时间】:2015-03-20 07:26:03
【问题描述】:

我正在尝试使用 restsharp 将其反序列化为 c# 对象

在标记为重复问题之前,我已经查看了以下堆栈溢出问题,但没有奏效

回应:

<response>
    <TAG>
         <tagid>1</tagid>
         <mac>00:12:8E:12:2F:34</mac>
    </TAG>
    <TAG>
         <tagid>2</tagid>
         <mac>00:11:8E:12:3F:11</mac>
    </TAG>
</response>

我希望使用的我的班级,但它只是说 count =0...

public class Response
{
    public Response()
    {
        this.Tag = new List<Tag>();
    }
    [XmlElement()]
    public List<Tag> Tag { get; set; } 
}

public class Tag
{
    public string Tagid { get; set; }
    public string Mac { get; set; }
}

尝试反序列化的代码

var request = new RestRequest
              {
                  Resource = "api/notimportant",
                  RequestFormat = DataFormat.Xml,
                  Method = Method.GET,
              };
request.AddParameter("fields", "all");

var client = new RestClient
             {
                 BaseUrl = new Uri(_url),
             }; 
client.AddHandler("application/xml", new DotNetXmlDeserializer());

var response = client.Execute<Response>(request);

我的许多测试

如果我使用响应,我什么也得不到,但是当我使用标签时,我只得到第一个元素而不是我想要的列表...

【问题讨论】:

    标签: c# deserialization


    【解决方案1】:

    它似乎部分区分大小写。全部大写的&lt;TAG&gt; 元素正在抛弃它。当我把课程改成这样时,我终于让它工作了:

    public class Response
    {
        public Response()
        {
            this.Tags = new List<TAG>();
        }
        public List<TAG> Tags { get; set; }
    }
    
    public class TAG
    {
        public string Tagid { get; set; }
        public string Mac { get; set; }
    }
    

    没有实际调用的 REST API,这是我为测试它所做的:

    var d = new XmlDeserializer();
    var response = new RestSharp.RestResponse();
    response.Content = @"<response>
    <TAG>
         <tagid>1</tagid>
         <mac>00:12:8E:12:2F:34</mac>
    </TAG>
    <TAG>
         <tagid>2</tagid>
         <mac>00:11:8E:12:3F:11</mac>
    </TAG>
    </response>";
    var result = d.Deserialize<Response>(response);
    

    【讨论】:

    • 您也许可以使用DeserializeAs 属性,虽然我不太确定它是否会起作用。
    • @Frontenderman 我一直在寻找类似的东西,但是当我尝试将 [DeserializeAs(Name = "TAG")] 添加到 Tags 属性时,它产生了 NullReferenceException。
    • restsharp 文档撒了谎:github.com/restsharp/RestSharp/wiki/Deserialization... 好的,我将尝试寻找一种方法使 DeserializeAs 工作,以便我可以遵循我的命名约定。
    • 所有这一切中最奇怪的部分是,如果您使用 Tag 而不大写它,restsharp 会返回第一个元素。但是如果你用响应嵌套它...... restsharp 无法处理它。这意味着 restsharp 没有处理这种情况。
    • 更新:我无法让 deserializeAs 工作。不得不写丑陋的类(不遵循我的命名约定)
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多