Lavorando con file XML che vengono serializzati e deserializzati si a ha spesso a che fare con campi di tipo date con valori nullable o più semplicemente con valori non presenti per un qualsiasi motivo.
La situazione è gestita come eccezione durante la lettura e può causare problemi.
Usando lo spazio dei nomi System.Xml.Serialization si può incontrare e risolvere il problema durante il processo di serializzazione e deserializzazione.
Ecco il problema, il codice seguente è un datetime nullable, che va bene in .NET
private DateTime? _nullableData;
[XmlAttribute] public DateTime? nullableData
{
get {
return _nullableData;
}
set {
_nullableData= value;
}
}
Quando si arriva alla serializzazione / deserializzazione, si riscontra un errore di:
System.InvalidOperationException: Cannot serialize member ‘DOB’ of type System.Nullable`1[System.DateTime]. XmlAttribute/XmlText cannot be used to encode complex types.
Un modo per risolvere il problema è quello di memorizzare la data usando una stringa e poi pre-elaborare la data e quindi memorizzarla nel campo della data nullable, in questo modo:
private DateTime? _nullableData;
[XmlIgnore]
public DateTime? nullableData
{
get { return _nullableData; }
set { _nullableData = value; }
}
[XmlAttribute(“nullableData”)]
public string nullableDataString
{
get {
return nullableData.HasValue ? XmlConvert.ToString(nullableData.Value, XmlDateTimeSerializationMode.Unspecified) : string.Empty;
}
set {
nullableData = !string.IsNullOrEmpty(value) ? XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.Unspecified) : (DateTime?) null;
}
}
Sono laureato in Ingegneria Informatica presso l’Univertità degli Studi di Lecce (2008).
Attualmente mi occupo di Sviluppo C#.Net / Mono in ambiente Linux
Sviluppo da anni applicativi ANSI C per terminali POS basati su processori ARM Risc 32Bit con 2-4 MB di Ram.
