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
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.