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

C# 将数据集合保存到本地文件夹,c#,.net,windows-8,C#,.net,Windows 8,我试着保存一个对象,结果成功了,但收集是我的问题,我使用的应用程序是每次用户输入数据时都保存用户数据 问题是:如何保存数据集合以及如何将其检索为数据集合?检查此链接,它是关于Windows Phone环境的,但我认为它也适用于您的情况:。使用DataMember属性装饰您的\u项目私有成员可能是一个问题 如果不是这样,可能observateCollection与DataContractSerializer不太配合,因此您可以使用常规的列表备份可观察的集合,并将该列表标记为数据成员 这篇文章可能有

我试着保存一个对象,结果成功了,但收集是我的问题,我使用的应用程序是每次用户输入数据时都保存用户数据


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

检查此链接,它是关于Windows Phone环境的,但我认为它也适用于您的情况:。使用
DataMember
属性装饰您的
\u项目
私有成员可能是一个问题


如果不是这样,可能
observateCollection
DataContractSerializer
不太配合,因此您可以使用常规的
列表
备份可观察的集合,并将该列表标记为
数据成员

这篇文章可能有帮助:UserItems.\u items是private和UserItems。items没有setter。最好只将属性标记为DataMember并为其指定一个setter。如果失败的只是RestoreAsync,那么您就有了答案
[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; }
    }
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);
        }
    }
}
}