Czy w przypadku przekształcania do postaci szeregowej i późniejszej deserializacji klasy przy użyciu DataContractSerializer
można kontrolować początkowe wartości właściwości, które nie były serializowane?Ustawianie wartości początkowej właściwości podczas korzystania z DataContractSerializer
Weź pod uwagę klasę Person
poniżej. Umowa dotycząca danych jest skonfigurowana do przekształcania do postaci szeregowej właściwości FirstName
i LastName
, ale nie do właściwości IsNew
. Chcę IsNew
, aby zainicjować PRAWDA, czy nowa osoba jest tworzona jako nowa instancja, czy jest deserializowana z pliku.
Jest to łatwe do wykonania przez konstruktora, ale jak rozumiem, DataContractSerializer
nie wywołuje konstruktora, ponieważ mogą wymagać parametrów.
[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;
}
}
Jak wspomina Pavel, powinno to być [OnDeserializing], w przeciwnym razie wartość zostanie nadpisana za każdym razem, a nie tylko raz (gdy jej brakowało). –