c# – Xml反序列化,跨不同标签的持久订单
发布时间:2020-12-15 17:25:43 所属栏目:百科 来源:网络整理
导读:我有xml(我无法控制),我需要使用XmlSerializer反序列化.我的麻烦是我需要在一个列表中保留两个不同标签之间的顺序.让我举个例子: users luser..some more elements../luser luser..some more elements../luser admin..different elements than in luser/adm
我有xml(我无法控制),我需要使用XmlSerializer反序列化.我的麻烦是我需要在一个列表中保留两个不同标签之间的顺序.让我举个例子:
<users> <luser>..some more elements..</luser> <luser>..some more elements..</luser> <admin>..different elements than in luser</admin> <luser>..some more elements..</luser> <admin>..different elements than in luser</admin> <luser>..some more elements..</luser> <admin>..different elements than in luser</admin> <users> 现在,如果我直截了当地反序化这个,我最终得到两个列表,一个用于lusers,另一个用于管理员.但是,它们出现的顺序是隐式ID! (当然应该是xml中的属性或元素,但不是这样) 我试图制作这样的元素 [XmlElement("luser"),XmlElement("admin")] public List<Person> Person { get; set; } 同 public class Person { public Luser Luser { get; set; } public Admin Admin { get; set; } } 计划是检查列表以查看条目是luser还是admin,并让人员包装器维护元素的顺序.但是,单个属性上的多个XmlElement属性似乎是非法的. 另一个可接受的解决方案是最终得到两个列表,但每个列表中的每个条目都有一个ID,我可以使用它来获取原始订单. 我希望这个尽可能干净.之后搜索xml以查找订单,手动提取标签等,这是我应该避免和做的最后的手段. 解决方法
然后尽快将其设为属性.然后使用结果. var doc = XDocument.Load(...); var fixeruppers = doc .Descendants("users") .Elements() .ToList(); // isolate us from any movements in the doc int id = 1; // base foreach (var fixer in fixeruppers) fixer.SetAttributeValue("Id",id++); XmlReader readerForDeserialize = doc.CreateReader(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |