Устанавливание начального значения свойства при использовании DataContractSerializer

Если я сериализирую и более поздняя десериализация использования класса DataContractSerializer как я могу управлять начальными значениями свойств, которые не были сериализированы?

Рассмотрите Person класс ниже. Его контракт данных установлен сериализировать FirstName и LastName свойства, но не IsNew свойство. Я хочу IsNew для инициализации к TRUE, является ли новый Человек, инстанцируют как новый экземпляр или десериализовываемый из файла.

Это легко сделать через конструктора, но насколько я понимаю DataContractSerializer не вызывает конструктора, поскольку они могли потребовать параметров.

[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;
    }
}
10
задан Eric Anastas 28 April 2010 в 00:01
поделиться

2 ответа

Вы можете использовать обратный вызов сериализации. Добавьте следующий метод в свой класс Person:

[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
    this.IsNew = true;
}

Другой вариант - удалить атрибуты [DataContract] и [DataMember]. В этом случае DCSerializer вызовет ваш конструктор при десериализации.

10
ответ дан 3 December 2019 в 15:51
поделиться

На самом деле правильный способ сделать это - использовать атрибут OnDeserializing (обратите внимание на суффикс «ing»). Метод, отмеченный этим атрибутом, вызывается перед десериализацией значений членов.

17
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: