|
|
Regole per la serializzazione di classi in XML |
|
|
Ogni classe che si vuole serializzare deve essere arricchita con l'attributo [Serializable]
Ogni classe che si vuole serializzare DEVE avere un costruttore vuoto (quando si esegue la DeSerializzazione la procedura crea un'instanza della classe quindi deve essere esplicitamente creato un costruttore con zero parametri)
Le proprietà che NON si vuole includere nella serializzazione devono essere arricchite con l'attributo [XmlIgnore]
Ogni proprietà che si vuole serializzare deve avere sia il "get" che il "set" ed entrambi devono essere dichiarati public
Se si vuole dichiarare un nome personalizzato per il nodo XML per ogni specifica proprietà, deve essere arricchita con l'attributo [XmlElement("NomeNodoPersonalizzato")] |
public static XmlElement Serialize(T obj) where T : new()
{
MemoryStream ms = new MemoryStream();
XmlSerializer xSer = new XmlSerializer(typeof(T));
xSer.Serialize(ms, obj);
ms.Position = 0;
XmlDocument xDoc = new XmlDocument();
xDoc.Load(ms);
return xDoc.DocumentElement;
}
Utilizzo della serializzazione:
Serialize(istanza della classe che si vuole serializzare);
|
|
Per aggiungere un XmlElement in una certa posizione di un nodo specifico, non si può utilizzare semplicemente il metodo di serializzazione, ma si deve utilizzare questa procedura:
subElement.AppendChild(subElement.OwnerDocument.ImportNode(Serialize(istanza della classe che si vuole serializzare), true));
dove:
subElement: il nodo a cui si vuole aggiungere il nodo serializzato
.AppendChild: metodo di aggiunta di un XmlElement
.OwnerDocument: proprietà per permettere l'importazione di un nodo creato da un contesto Document differente da quello del subElement
.ImportNode: metodo di importazione di un nodo all'interno di XmlDocument. Importa un nodo da un altro documento al documento corrente.
Serialize: metodo di serializzazione
true (secondo parametro del metodo ImportNode): clonazione/importazione completa dell'oggetto serializzato nell'XmlDocument
Annotazioni relative al metodo ImportNode
Link originale MSDN relativo al metodo XmlDocument.ImportNode
Il nodo restituito non ha elementi padre. Il nodo di origine non viene modificato o rimosso dal documento originale. ImportNode Crea una copia del nodo di origine.
L'importazione di un nodo crea un XmlNode oggetto appartenente al documento di importazione, con Name e NodeType identico al nodo di origine. Il nuovo oggetto inoltre dispone di attributi correlati agli spazi dei nomi (Prefix, LocalName, e NamespaceURI).
A seconda del tipo di nodo importato e il valore di deep parametro, informazioni aggiuntive verrà copiata. Questo metodo tenta di rispecchiare il comportamento previsto se un frammento di XML o HTML è stato copiato da un documento a un altro (riconoscendo che, in caso di XML, i due documenti potrebbero avere DTD diverse). |
private static T Deserialize(string xmlString) where T : new()
{
T obj = default(T);
MemoryStream stm = new MemoryStream();
StreamWriter stw = new StreamWriter(stm);
stw.Write(xmlString);
stw.Flush();
stm.Position = 0;
XmlSerializer xSer = new XmlSerializer(typeof(T));
obj = (T)xSer.Deserialize(stm);
return obj;
}
Utilizzo della deserializzazione:
Deserialize(istanza della classe che si vuole deserializzare);
|
|
|
|
|
|
|
|
|
|
I23 di Boccaletti Emanuele 41121 Modena (MO) Tel. +39 347 1302420 emanuele@i23.eu Skype: emanuele.boccaletti |
|
|
|
|