Я создал классы C#, используя xsd.exe из существующей схемы xsd. Он сгенерировал следующее свойство:
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>
Как мне инициализировать свойство Items, чтобы оно сериализовалось в <ConsignmentNumber>#1</ConsignmentNumber>?
new SomeRootElement {
Items = new Object[] {
// how to add ConsignmentNumber here
}
}
@АлександрПетров
Новый SomeRootElement { Элементы = новый объект [] { "# 1" }
Dbc: вы правы, есть ItemsElementName. Я только что опубликовал этот вопрос, чтобы @AlexanderPetrov мог ответить, потому что он ответил, что это вопрос, который был закрыт и больше никогда не открывался.
Вам нужно установить перечисление: private ItemsChoiceType[] itemsElementNameField;
@Liero - Обмен стеками не имеет системы обмена сообщениями, поэтому, если вы думаете, что добавление @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. Не могли бы вы отредактировать свой вопрос, чтобы включить его? Вероятно, связано: Ошибка сериализации XML — недопустимое или отсутствующее значение идентификатора выбора «ItemsElementName» типа «ItemsChoiceType[]». И на самом деле, это может быть дубликат. Посмотрите и дайте мне знать.