Serializzare / Deserializzare una data Nullable [c#]

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; 
    } 
}

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *