net xmlserializer:保持属性顺序

时间:2012-07-12 12:53:14

标签: c# .net xml-serialization

我可以成功地在xml文件中编写我的类Item。但是,归属的顺序发生了变化......

假设我有Item类

class Item
{
   Name
   Price
   Id

}

当我使用.net xmlserializer将它写入xml文件时,我得到了与我的类声明不同的顺序,例如

<Item Price="y" Name="x"  Id="z"  />

但我想要这样[保持解除顺序]

<Item Name="x" Price="y" Id="z"  />

如何在.NET中执行此操作?

2 个答案:

答案 0 :(得分:2)

你不应该对订单感到失望。如果你是,那么你没有正确处理你的xml

  

第3.1节“注意一个属性规范的顺序   start-tag或empty-element标记并不重要。“

答案 1 :(得分:0)

您热衷于属性的顺序,然后IXmlSerializable接口将控制类的序列化/反序列化过程。属性的顺序由代码行的顺序决定:

public void WriteXml(XmlWriter writer)
{
  //First example xml element
  writer.WriteStartElement("Item1");
  writer.WriteAttributeString("Name", Name);
  writer.WriteAttributeString("Price", Price);
  writer.WriteAttributeString("Id", Id);
  writer.WriteEndElement();

  //Second example xml element
  writer.WriteStartElement("Item2");
  writer.WriteAttributeString("Price", Price);
  writer.WriteAttributeString("Id", Id);
  writer.WriteAttributeString("Name", Name);
  writer.WriteEndElement();
}

输出:

<Item1 Name="x" Price="y" Id="z">
<Item2 Price="y" Id="z" Name="x">

如您所见,如果您切换代码行,则会更改订单。

但要注意,实现此接口会覆盖默认进程,让您可以编写整个序列化/反序列化过程。

此致   Nautious