Per semplicità, mostrerò il mio codice di esempio utilizzando la frutta. In realtà sto facendo qualcosa di più significativo (speriamo). Cerchiamo di dire che abbiamo un enum:Come evitare l'eccezione deserializzando un oggetto enum non valido?
public enum FruitType
{
Apple,
Orange,
Banana
}
e una classe:
[Serializable]
public class Fruit
{
public FruitType FruitType { get; set; }
public Fruit(FruitType type)
{
this.FruitType = type;
}
}
Siamo in grado di serializzare e de-serializzare esso. Ora, consente di rivedere l'enum, in modo che sia ora:
public enum FruitType
{
GreenApple,
RedApple,
Orange,
Banana
}
Quando de-serializzazione di oggetti precedentemente serializzati, si ottiene un'eccezione System.InvalidOperation
come Apple
(voce enum originale) non è valido. L'oggetto non viene de-serializzato.
Un modo sono stato in grado di risolvere questo è stato quello di dare la proprietà FruitType
nella classe Fruit
un nome diverso quando viene serializzato come segue:
[XmlElement(ElementName = "Mode")]
public FruitType FruitType { get; set; }
Ora, durante la de-serializzazione la vecchia proprietà viene ignorato come non è stato trovato Vorrei sapere se esiste un modo per ignorare/saltare elementi di enum non validi durante la de-serializzazione, in modo che non venga generata alcuna eccezione e l'oggetto continui a essere de-serializzato.
Vedere la mia risposta alla domanda collegata in cui includo un progetto di esempio di lavoro: http://stackoverflow.com/a/10709040 – user423430