将数据集合保存到本地文件夹

本文关键字:文件夹 保存 数据 数据集 集合 | 更新日期: 2023-09-27 17:54:38

[DataContract]
class UserData
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public int phoneNumber { get; set; }
    [DataMember]
    public string Course { get; set; }
    [DataMember]
    public Uri Image { get; set; }
}
[DataContract]
class UserItems
{
    [DataMember]
    static ObservableCollection<UserData> _items = new ObservableCollection<UserData>();
    [DataMember]
    public static ObservableCollection<UserData> Items
    {
        get { return _items; }
    }

这是AppDataManager

class AppDataManager
{
    public static async Task SaveAsync<T>(T data, string fileName)
    {
        StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, 
            CreationCollisionOption.GenerateUniqueName);

        var stream = await file.OpenStreamForWriteAsync();
        var serializer = new DataContractSerializer(typeof(T));
        serializer.WriteObject(stream ,data);
        await stream.FlushAsync();
    }
    public static async Task<T> RestoreAsync<T>(string fileName)
    {
        try
        {
            var file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            var instream = await file.OpenStreamForReadAsync();
            var serializer = new DataContractSerializer(typeof(T));
            return (T)serializer.ReadObject(instream);
        }
        catch (Exception)
        {
            return default(T);
        }
    }
}
}

我试图保存一个对象,它工作了,但收集是我的问题,我工作的应用程序是保存用户数据每次他输入数据。

问题是:如何保存数据集合以及如何将其作为数据集合检索?

将数据集合保存到本地文件夹

检查这个链接,它是关于Windows Phone环境的,但我认为它也适用于你的情况:http://geekswithblogs.net/mikebmcl/archive/2010/12/29/datacontractserializer-type-is-not-serializable-because-it-is-not-public.aspx。用DataMember属性装饰您的_items私有成员可能是问题所在。

如果不是这样,也许ObservableCollection<T>不能很好地与DataContractSerializer一起发挥作用,所以你可以使用常规的List<T>来备份可观察集合,并将该列表标记为DataMember