Чтобы иметь эту структуру в XML без написания настраиваемого сериализатора, вам необходимо иметь такую же структуру в ваших классах C #.Но это легко, потому что Visual Studio сделает это за вас.
Скопируйте желаемый XML и создайте классы для этой структуры XML .Это создаст следующие классы.Вам нужно сделать одну настройку и установить AnonymousType = false
, как я сделал ниже.
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Animals
{
private AnimalsCat[] catField;
private AnimalsFish[] fishField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("cat")]
public AnimalsCat[] cat
{
get
{
return this.catField;
}
set
{
this.catField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("fish")]
public AnimalsFish[] fish
{
get
{
return this.fishField;
}
set
{
this.fishField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false)]
public partial class AnimalsCat
{
private byte sizeField;
private string furColorField;
/// <remarks/>
public byte size
{
get
{
return this.sizeField;
}
set
{
this.sizeField = value;
}
}
/// <remarks/>
public string furColor
{
get
{
return this.furColorField;
}
set
{
this.furColorField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false)]
public partial class AnimalsFish
{
private byte sizeField;
private string scaleColorField;
/// <remarks/>
public byte size
{
get
{
return this.sizeField;
}
set
{
this.sizeField = value;
}
}
/// <remarks/>
public string scaleColor
{
get
{
return this.scaleColorField;
}
set
{
this.scaleColorField = value;
}
}
}
Использование
using (var xmlWriter = XmlWriter.Create("a.xml", new XmlWriterSettings { Indent = true }))
{
var eventArgsList = new Animals();
eventArgsList.cat = new AnimalsCat[1]; // set this based on the number
eventArgsList.fish = new AnimalsFish[2]; // set this based on the number
// Do this using a loop but I just hard coded it
eventArgsList.cat[0] = new AnimalsCat { size = 10, furColor = "red" };
eventArgsList.fish[0] = new AnimalsFish { size = 20, scaleColor = "blue" };
eventArgsList.fish[1] = new AnimalsFish { size = 30, scaleColor = "orange" };
new XmlSerializer(eventArgsList.GetType(), new[] { typeof(AnimalsCat), typeof(AnimalsFish) }).Serialize(xmlWriter, eventArgsList);
}
Выход
<?xml version="1.0" encoding="utf-8"?>
<Animals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<cat>
<size>10</size>
<furColor>red</furColor>
</cat>
<fish>
<size>20</size>
<scaleColor>blue</scaleColor>
</fish>
<fish>
<size>30</size>
<scaleColor>orange</scaleColor>
</fish>
</Animals>