如何使用Xml Attribute序列化含节点集合的XML并正确读取EVENT项数据
解决方案
你可以直接删除冗余的EventsCollection类,通过XmlArray + XmlArrayItem组合特性完成层级映射,配置后可以直接用List<EventItem>接收所有EVENT节点数据。
修改后的实体类代码
// EventItem类可保留原有配置,也可以删除无用的XmlRoot特性 public class EventItem { [XmlElement("Id")] public int ID {get; set;} [XmlElement("EventNumber")] public int EventNumber {get; set;} } [XmlRoot(ElementName="MSGDATA")] public class EventMsgData { // XmlArray指定外层集合节点名,XmlArrayItem指定集合内子元素节点名 [XmlArray("EVENTSCOLLECTION")] [XmlArrayItem("EVENT")] public List<EventItem> Events { get; set; } = new List<EventItem>(); }
修正后的调用代码
注意你原有代码的拼写错误:类名是XmlSerializer不是XmlSerialized
XmlSerializer xmls = new XmlSerializer(typeof(EventMsgData)); EventMsgData result = (EventMsgData)xmls.Deserialize(new StringReader("你的MSGDATA节点XML文本"));
原代码读取失败的原因
你之前定义的EventsCollection类的EventItems属性没有添加[XmlElement("EVENT")]特性,序列化器无法识别集合对应的子节点名,所以得到的是空列表。如果确实需要保留EventsCollection类,只需要给EventItems属性添加[XmlElement("EVENT")]即可正常读取。
内容的提问来源于stack exchange,提问作者Guy E
相关产品推荐
相关产品推荐

