首页 > 解决方案 > C# XML 序列化 - 基于数据的自定义排序

问题描述

我收到这样的 XML 文件:

<ToDoList>
  <WakeUp Order="1">
  <Eat    Order="2" What="Breakfast">
  <Work   Order="3">
  <Eat    Order="4" What="Lunch">
  <Work   Order="5">
  <Eat    Order="6" What="Dinner">
  <Sleep  Order="7">
</ToDoList>

在反序列化此 XML 并处理任务后,我需要再次将其序列化并换出一些元素(例如,跳过午餐会将中间的“Eat”更改为“Skip”):

<ToDoList>
  <WakeUp Order="1">
  <Eat    Order="2" What="Breakfast">
  <Work   Order="3">
  <Skip   Order="4" What="Lunch">
  <Work   Order="5">
  <Eat    Order="6" What="Dinner">
  <Sleep  Order="7">
</ToDoList>

但是,C# XML 序列化希望将元素组合在一起,因此所有“Eat”元素都在一起,等等......我知道我可以使用 [XmlElement(Order = #)] 属性来指定自定义顺序,但这只是更改组的顺序。我试图弄清楚如何告诉序列化程序使用数据模型中的“订单”属性,而不是在 XmlElement 中对订单进行硬编码。

从概念上讲,我正在寻找这样的东西:

[XmlElement(Order = Item.Order.Value)] <------
public List<Item> ToDoList { get; set; }

...或订购回调。我检查了 MSDN 上的 XML 序列化文档,但没有找到类似的东西。有任何想法吗?

标签: c#xmlserialization

解决方案


推荐阅读