使用自定义类保存列表或数组到应用程序设置

本文关键字:数组 应用程序 设置 列表 自定义 保存 | 更新日期: 2023-09-27 18:15:35

我目前正在使用admam nathan的书《101 Windows Phone Apps》中的应用程序设置类:

    public class Setting<T>
{
    string name;
    T value;
    T defaultValue;
    bool hasValue;
    public Setting(string name, T defaultValue)
    {
        this.name = name;
        this.defaultValue = defaultValue;
    }
    public T Value
    {
        get
        {
            //checked for cached value
            if (!this.hasValue)
            {
                //try to get value from isolated storage
                if (!IsolatedStorageSettings.ApplicationSettings.TryGetValue(this.name, out this.value))
                {
                    //not set yet
                    this.value = this.defaultValue;
                    IsolatedStorageSettings.ApplicationSettings[this.name] = this.value;
                }
                this.hasValue = true;
            }
            return this.value;
        }
        set
        {
            //save value to isolated storage
            IsolatedStorageSettings.ApplicationSettings[this.name] = value;
            this.value = value;
            this.hasValue = true;
        }
    }
    public T DefaultValue
    {
        get { return this.defaultValue; }
    }
    //clear cached value;
    public void ForceRefresh()
    {
        this.hasValue = false;
    }
}

,然后在一个单独的类中:

public静态类设置{//用户设置菜单

    public static readonly Setting<bool> IsAerialMapStyle = new Setting<bool>("IsAerialMapStyle", false);

}

这一切都很好,但我不知道如何保存一个数组或列表的长度24的应用程序设置使用这种方法。

我到目前为止有这个:

  public static readonly Setting<List<bool>> ListOpened = new Setting<List<bool>>("ListOpened",....

任何帮助将非常感激!

使用自定义类保存列表或数组到应用程序设置

参见使用数据契约。您需要通过类定义上的[DataContract]属性和每个字段(您想要保留的)上的[DataMember]声明您的设置类型为可序列化的。哦,你还需要System.Runtime.Serialization

如果您不想公开私有字段值(这些值被序列化为XML,可能会不适当地公开),您可以修饰属性声明,例如

using System.Runtime.Serialization;
. . .
[DataContract]
public class Settings {
    string Name;
    . . .
    [DataMember]
    public T Value {
    . . .
    }

如果你的类没有更新所有实例数据的属性,你可能还需要修饰那些私有字段。无需同时装饰公共属性和相应的私有字段。

哦,你包装这个类的所有类型T也必须是可序列化的。基本类型是,但是用户定义的类(可能还有一些CLR类型?)不是。

不幸的是,您不能将其作为单个key value字典条目存储在ApplicationSettings中。你只能存储内置的数据类型(int, long, bool, string..)。要保存这样的列表,必须将对象序列化到内存中,或者使用SQLCE数据库存储值(Mango)。