【发布时间】:2013-01-18 02:32:05
【问题描述】:
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 序列化的成员 属性。如果类型是集合,请考虑使用 集合数据合同属性。请参阅 Microsoft .NET 框架 其他受支持类型的文档。
【问题讨论】:
-
贴出UserData类的代码
-
异常的消息对我来说很清楚,你必须用属性标记类和成员,因为
DataContractSerializer是选择加入,而不是选择退出(就像常规的XmlSerializer)。