XML 带有可选段的序列化

XML Serialization with optional segment

当我想在下面序列化到 XML 时遇到问题,因为段 E1WPU03 是可选的,但是当它有值时,我需要将它放在段 E1WPU02

我已经尝试了两天,但最终它先写入段 E1WPU02,然后写入段 E1WPU03,但不起作用

我该怎么做?

XmlSerializer 通常不会交错元素。但是,您可以使用 List<> 和指定类型的多个 [XmlElement(...)] 来欺骗它:

class Program
{  
    static void Main()
    {
        var root = new MyXmlRoot
        {
            Items = {
                new Bar { },
                new Blap { },
                new Bar { },
            }
        };
        var ser = new XmlSerializer(typeof(MyXmlRoot));
        ser.Serialize(Console.Out, root);
    }
}

public abstract class Foo { } // base type used for the list
public class Bar : Foo {
    // more props here
}
public class Blap : Foo {
    // more props here
}
public class MyXmlRoot
{
    private readonly List<Foo> items = new List<Foo>();
    [XmlElement("E1WPUO2", typeof(Bar))]
    [XmlElement("E1WPUO3", typeof(Blap))]
    public List<Foo> Items { get { return items; } }
}

其他元素如 E1WPU01 不需要进入 Items 如果不需要交错 - 它们可以直接进入 MyXmlRoot (你可能已经有) .