Si je sérialisation et désérialisation ultérieure d'une classe à l'aide de DataContractSerializer
, comment puis-je contrôler les valeurs initiales des propriétés qui n'ont pas été sérialisées?Définition de la valeur initiale d'une propriété lors de l'utilisation de DataContractSerializer
Envisagez la classe Person
ci-dessous. Son contrat de données est configuré pour sérialiser les propriétés FirstName
et LastName
, mais pas la propriété IsNew
. Je veux IsNew
pour initialiser à TRUE si une nouvelle personne est instanciée comme une nouvelle instance ou être désérialisée à partir d'un fichier.
Ceci est facile à faire à travers le constructeur, mais si je comprends bien, DataContractSerializer
n'appelle pas le constructeur car ils pourraient nécessiter des paramètres.
[DataContract(Name="Person")]
public class Person
{
[DataMember(Name="FirstName")]
public string FirstName { get; set; }
[DataMember(Name = "LastName")]
public string LastName { get; set; }
public bool IsNew { get; set; }
public Person(string first, string last)
{
this.FirstName = first;
this.LastName = last;
this.IsNew = true;
}
}
Comme Pavel mentionne qu'il devrait être [OnDeserializing] sinon la valeur sera écrasée chaque fois plutôt qu'une seule fois (quand il était absent). –