0
[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);
        }
    }
}
}

私は1つのオブジェクトを保存しようとしましたが、うまくいきましたが、コレクションは私の問題です.私が働いているアプリは、彼がデータを入力するたびにユーザーデータを保存することです.

問題は、データのコレクションを保存する方法と、それをデータのコレクションとして取得する方法です。

4

1 に答える 1

0

このリンクを確認してください。これはWindowsPhone環境に関するものですが、あなたの場合にも当てはまると思います:http: //geekswithblogs.net/mikebmcl/archive/2010/12/29/datacontractserializer-type-is-not-serializable-because- it-is-not-public.aspx_itemsプライベートメンバーをDataMember属性で装飾することが問題になる可能性があります。

そうでない場合は、ObservableCollection<T>でうまく機能しないDataContractSerializer可能性があるため、代わりに、監視可能なコレクションを定期的にList<T>バックアップし、代わりにそのリストをとしてマークすることができますDataMember

于 2013-01-19T17:32:34.407 に答える