Улучшение ответа mtlung, почему вы не используете XmlSerializer? Вы можете настроить свой класс с помощью атрибута, чтобы его можно было сериализовать так, как вы хотите, и это довольно просто сделать.
using System.Xml.Serialization;
...
[XmlRoot("someclass")]
public class SomeClass
{
[XmlAttribute("p01")]
public int MyProperty01
{
get { ... }
}
[XmlArray("sometypes")]
public SomeType[] MyProperty02
{
get { ... }
}
[XmlText]
public int MyProperty03
{
get { ... }
}
public SomeClass()
{
}
}
Тогда сериализовать и десериализовать было бы довольно просто:
void Save(SomeClass obj)
{
XmlSerializer xs = new XmlSerializer(typeof(SomeClass));
using (FileStream fs = new FileStream("c:\\test.xml", ...))
{
xs.Serialize(fs, obj);
}
}
void Load(out SomeClass obj)
{
XmlSerializer xs = new XmlSerializer(typeof(SomeClass));
using (FileStream fs = new FileStream("c:\\test.xml", ...))
{
obj = xs.Deserialize(fs);
}
}
И полученный XML будет выглядеть примерно так:
<someclass p01="...">
<sometype>
<!-- SomeType serialized objects as child elements -->
</sometype>
# value of "MyProperty03" as text #
</someclass>
Этот метод лучше работает с классами "POCO", и он прост и чист. Вам даже не нужно использовать атрибуты, они есть, чтобы помочь вам настроить сериализацию.