Utilizzare la serializzazione XML per persistere dati su stream è un'operazione importante, molto utile e genericamente abbastanza semplice.
Può comunque risultare comodo sapere in che modo aggiungere un namespace personalizzato ed un eventuale prefisso ai tag del file Xml (stream in memoria o di rete..) che si desidera creare.
Vediamo come:
//Creo gli oggetti..e serializzo su file xml
XmlSerializer sr = new XmlSerializer(typeof(MyObject));
Serializer XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("dst", "http://www.debugswt.it/LifePlanner");
FileStream fs = new FileStream(@"c:\prova\test.xml",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
XmlSerializer writer = new XmlTextWriter(fs,Encoding.UTF8);
sr.Serialize(writer,myobject,ns);
writer.Close();
fs.Close();
Come mostrato qui sopra, dopo aver istanziato l'oggetto "serializzatore", è sufficiente creare un'istanza di tipo XmlSerializerNamespaces (classe contenente i namespaces Xml e relativi prefissi) , e aggiungere alla collection contenuta in essa, una coppia di valori di tipo stringa "prefisso" - "url" nella firma del metodo Add.
Dopo aver successivamente creato gli oggetti necessari alla persistenza dei dati (in questo caso un file Xml), è importante evidenziare l'overload utilizzato del metodo Serialize dell' XmlSerializer, che prevede come terzo parametro, oltre all'oggetto usato per scrivere e quello usato per serializzare, anche l'istanza di XmlSerializerNamespaces contenente il namespace che si desidera aggiungere.
Qui sotto, un esempio di codice Xml serializzato:
<abc:Root xmlns:abc="http://www.NsProva.it/dotnet">
<abc:Domande>
<abc:Domanda Codice="01" Contesto="Libri">
<abc:Testo>Come stai?</abc:Testo>
</abc:Domanda>
</abc:Domande>
</abc:Root>
Nel caso mostrato qui sopra il namespace viene automaticamente inserito nel nodo root del file, ma è anche possibile specificare namespace differenti all'interno del file, ad esempio associandoli ad un elemento oppure ad un attributo xml, decorando opportunamente le proprietà (o campo pubblico) del proprio oggetto con gli Xmlxxx attribute corretti.
[XmlElement(Namespace = "http://www.prova.net")]
public String Testo;
Per approfondimenti: Clicca qui..