Как инициализировать приватные поля после DataContractSerializer - PullRequest
0 голосов
/ 12 января 2012

Я знаю, что вы можете сериализовать частные поля с помощью DataContractSerializer, но я просто хочу сохранить минимальный объем данных, который легко редактируется человеком.После того, как DataContractSerializer выполнил свою задачу, есть ли функция, которую я могу переопределить или установить в классе DataContractSerializer, который просто устанавливает закрытые поля после выполнения десериализации?

[DataContract()]
[KnownType(typeof(stateCom))]
[KnownType(typeof(stateIp))]
abstract public  class  state
{
    [DataMember()]
    public string tag;
    [DataMember()]
    public byte Id;

    public HandleConnection master;


    // default data contstructor for xml serialization
    public state()
    {
    }

    public abstract void openPort();


    public abstract void closePort();
}

1 Ответ

2 голосов
/ 12 января 2012

Вы можете создать, например, OnDeserialized метод в вашем классе и применить OnDeserializedAttribute к нему как:

[DataContract()]
[KnownType(typeof(stateCom))]
[KnownType(typeof(stateIp))]
abstract public  class  state
{
    [DataMember()]
    public string tag;
    [DataMember()]
    public byte Id;

    public HandleConnection master;


    // default data contstructor for xml serialization
    public state()
    {
    }

    public abstract void openPort();


    public abstract void closePort();

    [OnDeserialized]
    internal void OnDeserialized(StreamingContext context)
    {
        // this is called after deserialization
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...