如何在C#中反序列化包含多种类型元素的XML数组
我正在尝试反序列化以下文件:
Wayne Stamkos 23 34 Sidney Lindros 41 44 Martin Roy 15 12 Paul Forsberg 21 51 Roberto Rinne 18 23
使用以下代码:
namespace ConsoleApplication2 { [XmlRoot("league")] public class League { [XmlArray("players")] [XmlArrayItem("skater")] public List skaters { get; set; } [XmlArrayItem("goalie")] public List goalies { get; set; } } public class Skater { [XmlElement("name")] public string Name; [XmlElement("goals")] public int Goals; [XmlElement("assists")] public int Assists; } public class Goalie { [XmlElement("name")] public string Name; [XmlElement("wins")] public int Wins; [XmlElement("losses")] public int Losses; } class Program { static void Main(string[] args) { using (FileStream reader = new FileStream(@"C:Temptest.xml", FileMode.Open, FileAccess.Read)) { var ser = new XmlSerializer(typeof(League)); League league = (League)ser.Deserialize(reader); } } } }
我期待得到一个联盟对象,其中包含一个包含3个元素的Skaters列表和一个包含2个元素的守门员列表。 我确实得到了预期的Skaters列表但是守门员列表是空的。 我究竟做错了什么?
有两种方法可以做到这一点; 首先是做一些事情:
[XmlArray("players")] [XmlArrayItem("skater", Type=typeof(Skater))] [XmlArrayItem("goalie", Type=typeof(Goalie))] public List Players { get; set; }
它将两个元素类型映射到单个集合中。 最糟糕的情况是, SomeCommonBaseClass
可能是object
:
[XmlArray("players")] [XmlArrayItem("skater", Type=typeof(Skater))] [XmlArrayItem("goalie", Type=typeof(Goalie))] public List
第二个是让
映射到包装器对象:
[XmlElement("players")] public Players Players { get;set;} ... public class Players { [XmlElement("skater")] public List Skaters {get;set;} [XmlElement("goalie")] public List Goalies {get;set;} }
选择哪个取决于具体情况; 后者允许“至多一个守门员”之类的东西,通过将其改为:
上述就是C#学习教程:如何在C#中反序列化包含多种类型元素的XML数组分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[XmlElement("goalie")] public Goalie Goalie {get;set;}
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997860.html