Serializar um objeto para XML

Eu tenho uma classe C# que herdei. Eu tenho "construído" o objeto. Mas eu preciso serializar o objeto para XML. Existe uma maneira fácil de o fazer?

Parece que a classe foi configurada para serialização, mas I'não tenho certeza de como obter a representação XML. A definição da minha classe é parecida com esta:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)]
public partial class MyObject
{
  ...
}

Aqui está o que eu pensei que poderia fazer, mas não funciona't funciona:

MyObject o = new MyObject();
// Set o properties
string xml = o.ToString();

Como posso obter a representação XML deste objecto?

Solução

Você tem que usar o XmlSerializer para a serialização XML. Abaixo está um trecho de amostra.

 XmlSerializer xsSubmit = new XmlSerializer(typeof(MyObject));
 var subReq = new MyObject();
 var xml = "";

 using(var sww = new StringWriter())
 {
     using(XmlWriter writer = XmlWriter.Create(sww))
     {
         xsSubmit.Serialize(writer, subReq);
         xml = sww.ToString(); // Your XML
     }
 }
Comentários (7)

Para seriar um objeto, faça:

 using (StreamWriter myWriter = new StreamWriter(path, false))
 {
     XmlSerializer mySerializer = new XmlSerializer(typeof(your_object_type));
     mySerializer.Serialize(myWriter, objectToSerialize);
 }

Lembre-se também que para o XmlSerializer funcionar, você precisa de um construtor sem parâmetros.

Comentários (1)

Aqui está um bom tutorial sobre como fazer isto

Você deve basicamente utilizar a classe `System.Xml.Serialization.XmlSerializer' para fazer isso.

Comentários (0)