使用RestSharp进行Xml序列反序列化

我有一个带有XML序列的API的xml feed。

  2002 1 2003 0 2004 0 1012 3 2006 0 2007 0 ...  

我已经尝试了一些使用Restsharp进行反序列化的选项。 理想情况下,我希望有类似下面的东西,但它显然不起作用。

 public class MyResponse { public List Settings { get; set;} } public class Setting { public int Cmd { get; set; } public int Status { get; set; } } 

谢谢

您可以使用DotNetXmlDeserializer的DotNetXmlDeserializer来使Microsoft的XmlSerializer进行实际的反序列化。 按如下方式定义MyResponse类,使用XML序列化属性指定元素名称,并对Cmd/Status交替元素序列进行特殊处理:

 [XmlRoot("Function")] public class MyResponse { [XmlIgnore] public List Settings { get; set; } ///  /// Proxy property to convert Settings to an alternating sequence of Cmd / Status elements. ///  [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] [XmlAnyElement] public XElement[] Elements { get { if (Settings == null) return null; return Settings.SelectMany(s => new[] { new XElement("Cmd", s.Cmd), new XElement("Status", s.Status) }).ToArray(); } set { if (value == null) Settings = null; else Settings = value.Where(e => e.Name == "Cmd").Zip(value.Where(e => e.Name == "Status"), (cmd, status) => new Setting { Cmd = (int)cmd, Status = (int)status }).ToList(); } } } 

然后反序列化如下:

  var serializer = new DotNetXmlDeserializer(); var myResponse = serializer.Deserialize(response); 

原型小提琴 。

您的XML与您的对象模型不匹配。 有两种简单的方法可以修复它*使您的XML响应实际上包含一个列表结构*编写自定义解析器。 ** http://sofzh.miximages.com/c%23/wiki“>value1 value2 value3 value4

将映射到以下C#架构:

 public class ListSample { public List Images { get; set; } } public class Image { public string Src { get; set; } public string Value { get; set; } }