C# 如何序列化为XmlChoice

C# 如何序列化为XmlChoice,c#,.net,xml-serialization,xsd.exe,system.xml,C#,.net,Xml Serialization,Xsd.exe,System.xml,我从中使用xsd.exe生成了C#类。它生成了以下属性: public class TrackRequestSearchCriteria { [System.Xml.Serialization.XmlElementAttribute("ConsignmentNumber", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("PieceReference", typeof(str

我从中使用xsd.exe生成了C#类。它生成了以下属性:

public class TrackRequestSearchCriteria {

[System.Xml.Serialization.XmlElementAttribute("ConsignmentNumber", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("PieceReference", typeof(string))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public object[] Items {
    get {
        return this.itemsField;
    }
    set {
        this.itemsField = value;
    }
}
预期的xml为:

<SearchCriteria>
    <ConsignmentNumber>#1</ConsignmentNumber>
</SearchCriteria>

@AlexanderPetrov

我使用xsd.exe根据所提出的方案生成了一组类

下面的代码给出了所需的xml

var trackRequest = new TrackRequest
{
    SearchCriteria = new TrackRequestSearchCriteria
    {
        Items = new object[] { "#1" }, // new string[]
        ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.ConsignmentNumber }
    }
};
 
var xs = new XmlSerializer(typeof(TrackRequest));
xs.Serialize(Console.Out, trackRequest);

TrackRequestSearchCriteria
中的某个位置,必须有一个名为
ItemsElementName
的属性。你能把你的问题包括进去吗?可能相关:。事实上,这可能是重复的。新SomeRootElement{Items=new Object[]{“#1”}dbc:你说得对,这里有ItemsElementName。我刚刚重新发布了这个问题,以便@AlexanderPetrov能够回答,因为他认为这是一个已关闭且从未重新打开的问题。你需要设置枚举:private ItemsChoiceType[]itemsElementNameField;@Liero-Stack-exchange因此,如果您认为在您的问题中添加
@alexanderprov
会给他发送消息,那么不会。
var trackRequest = new TrackRequest
{
    SearchCriteria = new TrackRequestSearchCriteria
    {
        Items = new object[] { "#1" }, // new string[]
        ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.ConsignmentNumber }
    }
};
 
var xs = new XmlSerializer(typeof(TrackRequest));
xs.Serialize(Console.Out, trackRequest);