Избегайте пустых полей после хранения в 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;
}
}