Logo UGIdotNET

XmlSerializer e proprietà con il suffisso "Specified"

In .Net 2.0 le proprietà che terminano con il suffisso "Specified" sono gestite in maniera particolare da XmlSerializer. Supponiamo di avere la seguente classe:

public class SerializableClass
{
  public string MyProperty { get; set; }
  public bool MyPropertySpecified { get; set; }
}

Serializzando la classe, ci aspetteremmo di ottenere un Xml con un nodo e un nodo ; ciò che invece accade è che il primo sarà presente solo ed esclusivamente nel caso in cui la proprietà MyPropertySpecified sia true. Per esempio, lo snippet seguente

SerializableClass myClass = new SerializableClass();
myClass.MyProperty = "asdfasfas";
myClass.MyPropertySpecified = false;

XmlSerializer ser = new XmlSerializer(myClass.GetType());
ser.Serialize(....);

produrrà in output un Xml del tipo

<?xml version="1.0"?>
<serializableclass xmlns:xsi=.... >
  <mypropertyspecified>
false</mypropertyspecified>
</serializableclass>

Si tratta di un modo semplice per avere un certo grado di controllo a runtime del risultato di un'operazione di serializzazione Xml di una classe. Maggiori informazioni possono essere reperite a questo link della MSDN Library.

Al fine di nascondere i dettagli implementativi dall'Xml generato, è una best practice (ma non è obbligatorio) apporre l'attributo XmlIgnore alla proprietà Specified, evitando che anch'essa venga serializzata.

Autore: Marco De Sanctis
Data: 21 settembre 2006
Ultimo aggiornamento: 21 settembre 2006
Categorie:  XML

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185