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


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

クリック イベントの MainPage.XAML で。

    private async void SaveButton_Click_1(object sender, RoutedEventArgs e)
    {

        data = new UserData()
        {
            Name = "ibraheem",
            ID = 1,
            phoneNumber = 799,
            Course = "java"
        };
        await AppDataManager.SaveAsync<UserData>(data, fileName);
    }

[保存]ボタンをクリックすると、例外が発生します

タイプ 'DesigningElements.UserData' をシリアル化できません。これを DataContractAttribute 属性でマークし、シリアル化するすべてのメンバーを DataMemberAttribute 属性でマークすることを検討してください。型がコレクションの場合は、CollectionDataContractAttribute でマークすることを検討してください。サポートされているその他の型については、Microsoft .NET Framework のドキュメントを参照してください。

4

1 に答える 1

2

UserDataクラスが以下のように宣言されていることを確認してください

[DataContract]
public class UserData
{
    [DataMember]
    public string Name { set; get; }
    [DataMember]
    public int ID { set; get; }
    [DataMember]
    public string phoneNumber { set; get; }
    [DataMember]
    public string Course { set; get; }
}
于 2013-01-17T18:32:05.373 に答える