RestSharp - 反序列化复杂对象

时间:2015-02-09 23:27:46

标签: c# .net rest deserialization restsharp

我使用RestSharp从我们在工作中使用的某个商业产品的API中获取数据。我在解决一些更复杂的问题时遇到了一些麻烦。正在返回的对象。

让我告诉你一个我遇到麻烦的案例。看看下面的示例XML:

<RESTAPI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="API.xsd">
    <ActionResults Resource="../api/action/1854/status">
        <ActionID>1854</ActionID>
        <Status>Open</Status>
        <DateIssued>Tue, 03 Feb 2015 08:24:14 +0000</DateIssued>
        <Computer ID="68787" Name="PO141303026">
            <Status>The action executed successfully.</Status>
            <State IsError="0">3</State>
            <ApplyCount>1</ApplyCount>
            <RetryCount>1</RetryCount>
            <LineNumber>2</LineNumber>
            <StartTime>Tue, 03 Feb 2015 08:39:41 +0000</StartTime>
            <EndTime>Tue, 03 Feb 2015 08:40:42 +0000</EndTime>
        </Computer>
        <Computer ID="5050237" Name="PO141303021">
            <Status>The action executed successfully.</Status>
            <State IsError="0">3</State>
            <ApplyCount>1</ApplyCount>
            <RetryCount>1</RetryCount>
            <LineNumber>2</LineNumber>
            <StartTime>Tue, 03 Feb 2015 09:37:25 +0000</StartTime>
            <EndTime>Tue, 03 Feb 2015 09:38:14 +0000</EndTime>
        </Computer>
        <Computer ID="5520173" Name="PO141303017">
            <Status>The action executed successfully.</Status>
            <State IsError="0">3</State>
            <ApplyCount>1</ApplyCount>
            <RetryCount>1</RetryCount>
            <LineNumber>2</LineNumber>
            <StartTime>Tue, 03 Feb 2015 16:27:31 +0000</StartTime>
            <EndTime>Tue, 03 Feb 2015 16:28:11 +0000</EndTime>
       </Computer>
    </ActionResults>
</BESAPI>

我尝试用以下类代表这个:

class ActionResults
{
    public ActionDetail()
    {
        // Empty constructor for RestSharp
    }

    public int ActionID { get; set; }
    public string Status { get; set; }
    public DateTime DateIssued { get; set; }
    public List<Computer> Computers { get; set; }
}

class Computer
{
    public Computer()
    {
        // Empty constructor for RestSharp
    }

    public int ID { get; set; }
    public string Name { get; set; }
    public string Status { get; set; }
    public int State { get; set; }
    public int ApplyCount { get; set; }
    public int RetryCount { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
}

ActionResult的顶级元素填充没有问题,但每台计算机的结果列表永远不会被填满。

我尝试更改类和属性的名称,以完全按照documentation中的要求进行匹配。

此外,我尝试使用DeserializeAs属性,如上面的链接所述,但似乎完全忽略了该属性。

然后我尝试实现自定义反序列化器,但这也很棘手。请参阅,我使用here建议的推荐用法,尤其是Execute方法。我希望尽可能保持所述方法的通用性。

不幸的是,您只能添加处理程序来反序列化某些内容类型,而不是特定的数据模型。

用于反序列化上述XML的正确C#类集是什么?如果无法做到这一点,那么保持解决方案尽可能通用的最佳解决方案是什么?

0 个答案:

没有答案