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.