public static async Task SaveFileAsync(string FileName, T data)
{
MemoryStream memStream = new MemoryStream();
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(memStream, data);
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(FileName,
CreationCollisionOption.ReplaceExisting);
using (Stream stream = await file.OpenStreamForWriteAsync())
{
memStream.Seek(0, SeekOrigin.Begin);
await memStream.CopyToAsync(stream);
await stream.FlushAsync();
}
}
public static async Task<T> RestoreFileAsync(string FileName)
{
T result = default(T);
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(FileName);
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
result = (T)serializer.ReadObject(inStream.AsStreamForRead());
return result;
}
}
catch (FileNotFoundException)
{
return default(T);
}
}
我正在使用这些方法来序列化我的数据, 但我有一个包含图像的类
[DataMember]
Public Image img{get;set;}
我正在尝试序列化它。 我实际上正在做以下事情
var thumb = await item.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,
1000, Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);
BitmapImage bmg = new BitmapImage();
bmg.SetSource(thumb);
Image img = new Image();
img.Source = bmg;
我试图自己序列化bitmapImage,但这是同样的问题。 我一直收到这个错误,我的BitmapImage有一个属性。
类型'Windows.UI.Xaml.Media.ImageSource'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。
答案 0 :(得分:0)
DataContractSerializer
无法使用图片。您应该使用BitmapEncoder
(如果您正在处理WriteableBitmap
或只是序列化BitmapImage
的源地址。如果位图是从本地路径或临时URL加载的,您想要保留整个位图 - 无论如何都无法从BitmapImage
中提取位图位,因此您需要从原始源URL下载源文件或复制您加载的本地文件。然后您可以将该副本保存为松散文件或序列化为DataContractSerializer
创建的XML内的Base64。