How to serialize into XmlChoice

393 views Asked by At

I have generated C# classes using xsd.exe from existing xsd schema. It generated following property:

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;
    }
}

The expected xml is:

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

How do I initialize the Items property, so that it serializes into <ConsignmentNumber>#1</ConsignmentNumber>?

new SomeRootElement {
   Items = new Object[] {
      // how to add ConsignmentNumber here
   }
}

@AlexanderPetrov

1

There are 1 answers

0
Alexander Petrov On BEST ANSWER

I used xsd.exe to generate a set of classes according to the presented scheme.

The following code gives the desired 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);