在C#中序列化和反序列化之间保留xml元素的顺序

时间:2014-06-02 10:50:39

标签: c# .net xml serialization

我已经从Xml架构生成了一个C#类。该类用于执行以下工具:

  1. 通过反序列化
  2. 读取Xml
  3. 对反序列化对象进行某些更改。
  4. 通过序列化将已处理的反序列化对象写入Xml。
  5. 基本上我在xml中填写了一些数据。

    我在保留反序列化和序列化之间某些元素的顺序方面存在问题。

    我有以下示例代码。 fPNodeTypeWindowField和fPNodeTypeClass1Field可以在两个xmls中互换出现。这些字段的顺序在Xml中不固定。在反序列化时阅读Xml时我不会遇到任何问题。这些字段的顺序遵循代码中提到的顺序。

    是否有任何可能的解决方案来保留这些字段的顺序,如Xml?

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class FPNodeTypeClass
    {
    
        private string helpTextField;
    
        private FpxFPTreeFPNodeTypeRootFPNodeTypeWindow[] fPNodeTypeWindowField;
    
        private FPNodeTypeClass[] fPNodeTypeClass1Field;
    
        private string nameField;
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string HelpText
        {
            get
            {
                return this.helpTextField;
            }
            set
            {
                this.helpTextField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("FPNodeTypeWindow")]
        public FpxFPTreeFPNodeTypeRootFPNodeTypeWindow[] FPNodeTypeWindow
        {
            get
            {
                return this.fPNodeTypeWindowField;
            }
            set
            {
                this.fPNodeTypeWindowField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("FPNodeTypeClass")]
        public FPNodeTypeClass[] FPNodeTypeClass1
        {
            get
            {
                return this.fPNodeTypeClass1Field;
            }
            set
            {
                this.fPNodeTypeClass1Field = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string name
        {
            get
            {
                return this.nameField;
            }
            set
            {
                this.nameField = value;
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

我发现自己在序列化时可以修复订单。它不会是动态的。