【问题标题】:Why System.Xml.Serialization output order changes为什么 System.Xml.Serialization 输出顺序发生变化
【发布时间】:2014-01-08 21:34:55
【问题描述】:

我刚刚学习了 C# 中的 XML 序列化。在弄清楚它的过程中,我偶然发现了一个奇怪的东西,想知道为什么。

如果我使用下面的代码,

[Serializable, XmlRoot("ThisIsTheRootName")]
public class Person
{
  public string FirstName;
  public string MiddleName;
  public string LastName;
  [XmlText]
  public string Text;
}

我在序列化时得到这个输出:

    <?xml version="1.0" encoding="IBM437"?>
<ThisIsTheRootName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstName>firstname</FirstName>
  <MiddleName>middlename</MiddleName>
  <LastName>lastname</LastName>This is some text</ThisIsTheRootName>

所有元素都按我预期的顺序排列。

如果我切换到使用属性而不是字段,突然顺序不是我所期望的。代码:

[Serializable, XmlRoot("ThisIsTheRootName")]
public class Person
{
  public string FirstName;
  public string MiddleName { get; set; }
  public string LastName;
  [XmlText]
  public string Text;
}

输出:

<?xml version="1.0" encoding="IBM437"?>
<ThisIsTheRootName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstName>firstname</FirstName>
  <LastName>lastname</LastName>This is some text<MiddleName>middlename</MiddleName></ThisIsTheRootName>


为什么顺序会改变?我应该更喜欢属性还是字段?有关系吗?

在 Windows 7 64 位上使用 Visual Studio 2010、C#、.NET 4.0 框架。

【问题讨论】:

  • 没有回答您的实际问题,但您可以使用[XmlElement(Order=1)] 强制订购...

标签: c# xml-serialization


【解决方案1】:

因为默认情况下XmlSerializer 先序列化您的字段,然后再序列化您的属性。但是,您可以使用 XmlElement 属性更改此行为,它的 Order 属性如下:

[Serializable, XmlRoot("ThisIsTheRootName")]
public class Person
{
  [XmlElement(Order = 1)]
  public string FirstName;
  [XmlElement(Order = 2)]
  public string MiddleName { get; set; }
  [XmlElement(Order = 3)]
  public string LastName;
  [XmlText]
  public string Text;
}

您可能还想看看这些问题:

  1. .NET Serialization Ordering
  2. Force XML elements to match the class order when serializing
  3. Change the order of elements when serializing XML

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 2016-03-21
    • 2014-02-21
    • 2017-02-05
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多