gpt4 book ai didi

serialization - IsolatedStorageSettings.ApplicationSettings 不保留所有属性

转载 作者:行者123 更新时间:2023-12-03 12:18:58 26 4
gpt4 key购买 nike

我正在尝试将此类序列化和反序列化为 Windows Phone ApplicationSettings,但由于某种原因,只有 Items 被保留,而不是 Title LastChanged 属性。任何关于为什么的想法都会受到赞赏!

类:

public class VehicleCollection : ObservableCollection<Vehicle>
{
public string Title { get; set; }
public DateTime LastChanged { get; set; }

public bool HasNoItems { get { return Items.Count == 0; } }

public VehicleCollection() { }
public VehicleCollection(string title, DateTime lastChanged)
{
Title = title;
LastChanged = lastChanged;
}

protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
base.OnCollectionChanged(e);
OnPropertyChanged(new PropertyChangedEventArgs("HasNoItems"));
}
}

坚持逻辑:

    public static bool SavePersistent(string key, object value)
{
if (null == value)
return false;

var store = IsolatedStorageSettings.ApplicationSettings;
if (store.Contains(key))
store[key] = value;
else
store.Add(key, value);

store.Save();
return true;
}

public static T LoadPersistent<T>(string key)
{
var store = IsolatedStorageSettings.ApplicationSettings;
if (!store.Contains(key))
return default(T);

return (T)store[key];
}


编辑:我创建了一个行为很明显的示例项目。 http://www.fileswap.com/dl/2ar0ygF8w7/

  1. 运行应用并观察正在创建的静态数据
  2. 按“保存数据”保存到 IsolatedStorage
  3. 关闭并重新运行应用
  4. 看着两个集合的标题消失,因为它们没有持久化

最佳答案

我最好的猜测是,问题是由于您从 ObservableCollection 继承了 VehicleCollection 类,并且序列化和反序列化中有一段代码,如“如果对象是 ObservableCollection”。我已经尝试了您的示例解决方案,成员的 getter 根本没有在序列化时被调用,setter 也没有在反序列化时被调用。

解决方案是像这样重构您的 VehicleCollection 类:

  public class VehicleCollection 
{
public string Title { get; set; }
public DateTime LastChanged { get; set; }

public bool HasNoItems { get { return Items.Count == 0; } }

public VehicleCollection()
{
Items = new ObservableCollection<Vehicle>()
}
public VehicleCollection(string title, DateTime lastChanged) :this()
{
Title = title;
LastChanged = lastChanged;
}

public ObservableCollection<Vehicle> Items

}

当然,坏事是 VehicleCollection 需要实现 INotitifyPropertyChanged 才能触发 HasNoItems。无论如何 - 如果我在您的示例解决方案中以这种方式更改它,它就会起作用。

关于serialization - IsolatedStorageSettings.ApplicationSettings 不保留所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com