Serializzare un oggetto in XML

Ho una classe C# che ho ereditato. Ho costruito con successo l'oggetto. Ma ho bisogno di serializzare l'oggetto in XML. C'è un modo semplice per farlo?

Sembra che la classe sia stata impostata per la serializzazione, ma non sono sicuro di come ottenere la rappresentazione XML. La definizione della mia classe assomiglia a questa:

[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
{
  ...
}

Ecco cosa pensavo di poter fare, ma non funziona:

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

Come posso ottenere la rappresentazione XML di questo oggetto?

Soluzione

Dovete usare XmlSerializer per la serializzazione XML. Qui sotto c'è uno snippet di esempio.

 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
     }
 }
Commentari (7)

Per serializzare un oggetto, fate:

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

Ricorda anche che per far funzionare XmlSerializer, hai bisogno di un costruttore senza parametri.

Commentari (1)

Qui c'è un buon tutorial su come farlo

Dovresti fondamentalmente usare la classe System.Xml.Serialization.XmlSerializer per fare questo.

Commentari (0)