Ho una base di codice esistente che persiste un paio di classi semplici su disco tramite NetDataContractSerializer
, ma le classi non sono purtroppo adornate con [DataContract]
, ma con [Serializable]
. Funziona bene, ma ora voglio aggiungere alcune nuove proprietà alle classi persistenti, pur essendo ancora in grado di leggere i file generati dalla vecchia versione.Proprietà facoltative durante la deserializzazione di una miscela di DataContract/serializzabile
Diciamo che questa è la classe:
[Serializable]
public class Persisted
{
public int OldProperty {get;set;}
public int NewProperty {get;set;}
}
Ora, quando deserializzare i vecchi file, ottengo un'eccezione perché non contengono NewProperty
. Questo ha senso. Quindi volevo che lo NewProperty
fosse ignorato, ma mentre c'è un attributo [OptionalField]
in modo che il serializzatore ignori il campo mancante, non può essere applicato alle proprietà - solo campi.
così ho pensato che userò [DataContract]
e [DataMember]
, che ha anche una proprietà IsRequired
, ma questo cambia il layout del file serializzato, e non è in grado di leggere i file di dati vecchi. Inoltre, non è possibile combinare [Serializable]
e [DataMember]
- se il serializzatore vede l'attributo [Serializable]
, ignora le direttive [DataMember]
.
Quindi, escludendo l'opzione di eseguire una conversione una tantum dei vecchi file (possibile, ma non la mia prima scelta), c'è un modo per ottenere che NetDataContractSerializer ignori un campo in un oggetto serializzato XML esistente?