【问题标题】:Why does VS sort XML class childs alphabetical, and how to avoid that?为什么 VS 按字母顺序对 XML 类子项进行排序,以及如何避免这种情况?
【发布时间】:2020-09-30 06:44:50
【问题描述】:

我以预定义的结构编写了一个 .cs 文件,用于读取特定类型的 XML 文件。该文件下面有更多的类。此时大约为 67 轮。

这是我在 .tcx 文件中读取的代码,这些文件是 XML 文件。

        ModelData _xmlConfigData = new ModelData();
        XmlSerializer _xmlSerializer = new XmlSerializer(typeof(ModelData));

        try
        {
            using (FileStream filestream = new FileStream(xmlFilePath, FileMode.Open, FileAccess.Read))
            {
                _xmlConfigData = (ModelData)_xmlSerializer.Deserialize(filestream);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Wrong XML structure read in. Please select another XML file:" + ex);
            _xmlConfigData = null;
        }
        InvokeExtension.CreateListboxEntry(InvokeExtension.INFO + "TCX read successful", _lBox);
        InvokeExtension.SetProgressbarValue(1000, _pBar);

读取数十万行没有错误。但是,如果我查看我的类对象(在调试时),子类会按字母顺序列出。我唯一要做的就是将 .tcx 读入 ModelData-class-object 并将其写入新文件。 这是我的作家代码:

编写新文件后,XML 结构看起来很完美,但与原始文件相比,现在一些子元素的排序方向不同。这导致了问题。我不知道为什么以及如何防止对子节点进行排序。在我看来,子节点在 XML 文件中的顺序并不重要。

【问题讨论】:

  • 您必须将[XmlElement] 属性与XmlElementAttribute.Order 属性一起用于每个 元素。
  • 好的,我试试看。谢谢你
  • 谢谢马特,您的信息解决了我的问题。请把它写成这个问题的答案,以获得一些声誉积分。

标签: c# .net xml serialization xml-serialization


【解决方案1】:

默认情况下,XmlSerializer 会按字母顺序写出所有元素。

您可以通过使用[XmlElement] attribute 装饰所有元素来更改此设置,并为该属性的XmlElementAttribute.Order 属性指定索引值。

请注意,一旦您选择对一个元素执行此操作,您就必须对所有个元素执行此操作。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2022-01-13
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多