【问题标题】:net xmlserializer : keeping attributes ordernet xmlserializer:保持属性顺序
【发布时间】:2012-07-12 12:53:14
【问题描述】:

我可以成功地将我的类项目写入 xml 文件。但是属性的顺序变了……

假设我有 Item 类

class Item
{
   Name
   Price
   Id

}

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

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

但我想要这样 [保持 decleration order]

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

我如何在 NET 中做到这一点?

【问题讨论】:

  • 这可能是个愚蠢的问题,但既然这是 xml,你应该用 xml 库来解析它......为什么这很重要?
  • 我不依赖订单人...我只是想在我的 xml 上进行一些美观的外观...而且我知道 XML 不适合人类阅读...但我很生气“形式”,我希望它按某种顺序...

标签: c# .net xml-serialization


【解决方案1】:

您不应该关心订单。如果是,那么您没有正确处理您的 xml

第 3.1 节“注意属性规范在一个 开始标签或空元素标签不重要。”

【讨论】:

  • 我知道 XML 不适合人类阅读...这可能很愚蠢,但我想要订单只是因为一些“化妆品”好看...仅此而已...
  • 我个人不会打扰,就像你说的那样它不适合人类阅读。但如果你真的想我认为这篇文章可能会处理类似blogs.microsoft.co.il/blogs/rotemb/archive/2008/07/27/…
【解决方案2】:

你热衷于属性的顺序,那么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">

如您所见,如果您切换代码行,那么顺序就会改变。

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

问候 调皮

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多