Если вы используете xsd.exe для генерации этого класса, он дает вам то же самое:
public partial class MyRoot {
private object[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("MyChildOne", typeof(MyRootMyChildOne))]
[System.Xml.Serialization.XmlElementAttribute("MyChildTwo", typeof(string))]
public object[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
За исключением использования известных объявлений типов:
[System.Xml.Serialization.XmlElementAttribute("MyChildTwo", typeof(string))]
Такэто имеет смысл, если вы думаете об этом.Поскольку ваш дочерний тип 2 является строкой, а строка - простым типом в XSD, вы можете добавить экземпляры System.String в свой массив Items и затем сериализовать это, используя приведенный выше код.Каждая строка будет заключена в узел <MyChildTwo/>
.
ОБНОВЛЕНИЕ
Чтобы сделать эту работу, вы создаете свой тип, а затем используете XmlSerializer:
var root = new MyRoot();
root.Items = new object[2];
root.Items[0] = new MyRootMyChildOne { Items = new object[1], SomeAttribute = "test", SomethingElse = "test" };
root.Items[1] = "hello";
var ser = new XmlSerializer(typeof(MyRoot));
var memoryStream = new MemoryStream();
var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
var streamReader = new StreamReader(memoryStream, Encoding.UTF8);
ser.Serialize(xmlTextWriter, root);
memoryStream.Position = 0;
string xml = streamReader.ReadToEnd();
Это дает нам следующий XML:
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyChildOne SomeAttribute="test" SomethingElse="test" />
<MyChildTwo>hello</MyChildTwo>
</MyRoot>