我需要在IsolatedStorage中存储不同的对象,并且我正在使用IsolatedStorageSettings类来执行此操作。一些对象是基本类型,因此可以很好地存储和检索。但其中一些是自定义类实例,它们存储得很好,但是当我尝试检索它们时,我得到了具有初始值的实例。 如何在IsolatedStorage中存储自定义类实例并检索它们?
菲尔·桑德勒,我想是的。但我不知道什么类型的序列化使用隔离存储,所以我不知道如何使我的类可序列化。还必须存储私有字段。 这是自定义类的代码:public class ExtentHistory : INotifyPropertyChanged
{
private const int Capacity = 20;
private List<Envelope> _extents;
private int _currentPosition;
public event PropertyChangedEventHandler PropertyChanged;
public int ItemsCount
{
get { return _extents.Count; }
}
public bool CanStepBack
{
get { return _currentPosition > 0; }
}
public bool CanStepForward
{
get { return _currentPosition < _extents.Count - 1; }
}
public Envelope CurrentExtent
{
get { return (_extents.Count > 0) ? _extents[_currentPosition] : null; }
}
public ExtentHistory()
{
_extents = new List<Envelope>();
_currentPosition = -1;
}
public void Add(Envelope extent)
{
if (_extents.Count > Capacity)
{
_extents.RemoveAt(0);
_currentPosition--;
}
_currentPosition++;
while (_extents.Count > _currentPosition)
{
_extents.RemoveAt(_currentPosition);
}
_extents.Add(extent);
}
public void StepBack()
{
if (CanStepBack)
{
_currentPosition--;
NotifyPropertyChanged("CurrentExtent");
}
}
public void StepForward()
{
if (CanStepForward)
{
_currentPosition++;
NotifyPropertyChanged("CurrentExtent");
}
}
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
以下是存储和检索的功能:
private IsolatedStorageSettings _storage;
public void Store(string key, object value)
{
if (!_storage.Contains(key))
{
_storage.Add(key, value);
}
else
{
_storage[key] = value;
}
}
public object Retrieve(string key)
{
return _storage.Contains(key) ? _storage[key] : null;
}
我不想手动序列化每个要添加的对象,我想默认将自定义类序列化,以将其存储在独立存储中(如果可能的话)
答案 0 :(得分:2)
我的初衷猜测是序列化问题。您的所有物业都有公共制定者吗?发布您正在存储的类以及用于存储它们的代码。
我相信IsolatedStorageSettings默认使用DataContractSerializer。如果你想要ExtentHistory被序列化,你应该阅读你需要做些什么才能让它与这个序列化器一起正常工作:
您可以严格创建一个单独的对象,以便将数据存储在独立存储中(有点像DTO)。这将允许您按原样保留ExtentHistory。