Избегайте пустых полей после хранения в IsolatedStorageSettings

На Silverlight я получил DataContract как это:

[DataContract]
class Operation
{
    [DataMember]
    public string Name;

    public readonly OperationManager Manager = new OperationManager();
}

Я не хочу хранить или сериализовать менеджер, поэтому это не DataMember, Менеджер не нулевой при выполнении new Operation(), Но когда я получаю это из IsolatedStorageSettingsЯ получаю нулевой менеджер:

// operation.Manager is not null
var Settings = IsolatedStorageSettings.ApplicationSettings;
Settings["key"] = operation;
Settings.Save();
operation = (Operation)Settings["key"];
// operation.Manager is null

Есть ли способ автоматически переинициализировать Manager на что-то новое, когда он не сериализуется IsolatedStorageSettings? Я пытался установить его в конструкторе, но конструктор не вызывается при прохождении IsolatedStorageSettings,

2 ответа

Решение для инициализации чего-либо IsolatedStorageSettings либо [OnDeserializing] или же [OnDeserialized] (не могу использовать .ctor(SerializationInfo info, StreamingContext context) как недоступно на Silverlight).

[DataContract]
class Operation
{
    [DataMember]
    public string Name;

    OperationManager _manager = new OperationManager();
    public OperationManager Manager { get { return _manager; } }

    [OnDeserializing]
#if WP7
    internal
#endif
    void OnDeserializing(StreamingContext c)
    {
        _manager = new OperationManager();
    }
}

[OnDeserializing] а также [OnDeserialized] должен быть внутренним в Windows Phone 7 и частным в Visual Studio 2013. -_-

У меня нет опыта работы с Silverlight или IsolatedStorageSettings, поэтому я не знаю, есть ли какие-либо специальные приемы, но простое решение состоит в том, чтобы использовать свойство и создать экземпляр OperationManager в этом при необходимости.

private OperationManager manager; // no longer readonly

public OperationManager Manager
{
    get
    {
        if (manager == null) manager = new OperationManager();
        return manager;
    }
}
Другие вопросы по тегам