使用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
将映射到以下C#架构:
public class ListSample { public List Images { get; set; } } public class Image { public string Src { get; set; } public string Value { get; set; } }