微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Xml反序列化,跨不同标签的持久订单

我有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以查找订单,手动提取标签等,这是我应该避免和做的最后的手段.

解决方法

Which of course should have been an attribute…

然后尽快将其设为属性.然后使用结果.

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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐