C# 如何序列化为XmlChoice
我从中使用xsd.exe生成了C#类。它生成了以下属性: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
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);