XmlSerializer e serializzazione personalizzata

Personalizzare l'XML prodotto dalla serializzazione di una classe con XmlSerialization è motlo semplice; è sufficiente infatti far implementare alle classi coinvolte nella serializzazione l'interfaccia IXmlSerializer.

Voglio mostrarvi un esempio: ho avuto la necessità di serializzare una classe che conteneva alcune liste di altre classi; il documento prodotto non doveva raggruppare le varie liste in nodi che rappresentavano le proprietà, ma elencare tutte le istanze sotto il nodo radice.

La classi di esempio:

public class InterfaceIn : IXmlSerializable { public List<Field> Fields { get; set; } public List<Constant> Constants { get; set; } ... }

XML che dovrebbe essere prodotto:

<INTERFACEIN> <CONSTANT DESTINATION="COMMIT_FLAG" VALUE="X" /> <CONSTANT DESTINATION="SAVE_FLAG" VALUE="X" /> <FIELD NAME="DOC_NUMBER" DESTINATION="DOKNR" /> <FIELD NAME="DOC_PART" DESTINATION="DOKTL" /> </INTERFACEIN>

E uno stralcio di implementazione dell'interfaccia IXmlSerailizable delle classi coinvolte:

Esempio di deserializzazione di InterfaceIn

public void ReadXml(System.Xml.XmlReader reader) { reader.Read(); while (!reader.EOF) { if (reader.IsStartElement()) { switch (reader.Name) { case "FIELD": var f = new Field(); f.ReadXml(reader); this.Fields.Add(f); break; case "CONSTANT": var c = new Constant(); c.ReadXml(reader); this.Constants.Add(c); break; } } reader.Read(); } }

Esempio di serializzazione di InterfaceIn

public void WriteXml(System.Xml.XmlWriter writer) { foreach (var f in this.Fields) f.WriteXml(writer); foreach (var c in this.Costants) c.WriteXml(writer); }

Esempio di serializzazione di Field:

public void WriteXml(System.Xml.XmlWriter writer) { writer.WriteStartElement("FIELD"); writer.WriteAttributeString("NAME", this.Name); writer.WriteAttributeString("DESTINATION", this.Destination); writer.WriteEndElement(); }

In buona sostanza è sufficiente avere un po' di dimistischezza con l'uso degli Stream, per ottenere delle serializzazioni personalizzate.

 

Matteo

 

Technorati Tag: ,,

Print | posted @ sabato 14 febbraio 2009 17:37

Comments on this entry:

Gravatar # re: XmlSerializer e serializzazione personalizzata
by taoruankeji at 19/08/2010 09:23

PDF to TIFF Converter is a professional PDF to images program which let you convert PDF to TIFF and lots of image formats with high quality, such as JPEG, PNG, GIF, BMP, PCX, TGA. As to convert PDF to TIFF, you can freely set output encoder, including lossless, RLE, FAX G3, etc. Using this PDF to TIFF Converter, alos can choose colorful, grey and black/white as output color. Reset resolution is applicable as well.
PDF to XLS Converter
PDF to EPUB Converter
Convert PDF to GIF
Comments have been closed on this topic.