我使用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#类集是什么?如果无法做到这一点,那么保持解决方案尽可能通用的最佳解决方案是什么?