C# Restsharp-反序列化xml以列出元素标记包含唯一id的位置

C# Restsharp-反序列化xml以列出元素标记包含唯一id的位置,c#,rest,deserialization,restsharp,C#,Rest,Deserialization,Restsharp,我正在使用基于Rest的服务(CRM系统称为Solve360),例如,我正在抓取联系人列表。这里是我从服务器收到的一个片段: <response> <id99623996> <id>99623996</id> <name>Aaron</name> <typeid>1</typeid> <parentid>98830114</parentid> <pa

我正在使用基于Rest的服务(CRM系统称为Solve360),例如,我正在抓取联系人列表。这里是我从服务器收到的一个片段:

<response>
 <id99623996>
  <id>99623996</id>
  <name>Aaron</name>
  <typeid>1</typeid>
  <parentid>98830114</parentid>
  <parentcn>CC</parentcn>
  <flagged/>
  <created>2014-01-03T17:10:47+00:00</created>
  <viewed>2014-01-14T20:35:26+00:00</viewed>
  <updated>2014-01-03T17:11:13+00:00</updated>
 </id99623996>
 <id99624297>
  <id>99624297</id>
  <name>Abigail </name>
  <typeid>1</typeid>
  <parentid>98830114</parentid>
  <parentcn>CC</parentcn>
  <flagged/>
  <created>2014-01-03T17:11:01+00:00</created>
  <viewed>2014-01-03T17:11:01+00:00</viewed>
  <updated>2014-01-03T17:11:13+00:00</updated>
 </id99624297>
</response>
因此,我的最终反序列化响应为null。
如有任何建议,我们将不胜感激。我认为问题在于包含id号的xml标记。不知道如何用Restsharp处理这个问题。

在我看来,您的根元素(“”)需要一个表示列表的子元素。然后,该元素的子元素应该是Contact元素。另外,RestSharp如何知道“”是联系人元素?但是,如果您无法更改XML结构(因为CRM系统),您可以尝试手动处理XML以获取元素的内容,然后可以使用RestSharp将其反序列化为联系人实例。否,我无法更改CRM系统的输出。我希望我不必为我想要检索的每个元素编写手动反序列化程序。您能详细说明一下,一旦我按照您的建议处理了列表,我将如何将这些元素传递回RestSharp吗?谢谢。正如您所说,您可以实现自己的XML反序列化程序,该程序由RestSharp使用,用于处理XML结构。不幸的是,我不知道如何在RestSharp中为XML实现这一点。我的经验是只使用JSON.NET进行JSON反序列化(但无论如何RestSharp已经放弃了JSON.NET),所以我真的不知道如何进行详细的反序列化。对不起:(
public T ExecuteSerializedCommand<T>(string resourceLoc, string method, Dictionary<string, string> parameters) where T : new() {
var request = BuildRestRequest(resourceLoc, method, parameters);
request.RootElement = "Response";
var response = RestSharpObj.Execute<T>(request);
if (response.ErrorException != null) {
    const string message = "Error retrieving response.  Check inner details for more info.";
    var rsMessage = new ApplicationException(message, response.ErrorException);
    throw rsMessage;
}
    return response.Data;
}
public List<Contact> GeContacts() {
    return ExecuteSerializedCommand<List<Contact>>(ITEM_CONTACTS, RESTVERB_GET, new  Dictionary<string, string>());
}
public class Contact {
    public int id { get; set; }
    public string name { get; set; }
    public int typeid { get; set; }
    public int parentid { get; set; }
    public string parentcn { get; set; }
    public string flagged { get; set; }
    public DateTime created { get; set; }
    public DateTime viewed { get; set; }
    public DateTime updated { get; set; }
}