在WinRT中序列化BitmapImage

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 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文档。

DataContractSerializer不适用于图像。 您应该使用BitmapEncoder (如果您正在处理WriteableBitmap或只是序列化您的BitmapImage的源地址。如果位图是从本地路径或临时URL加载而您想要保留整个位图 – 您无法提取无论如何都要从BitmapImage位图位,因此您需要从原始源URL下载源文件或复制您加载的本地文件。然后您可以将该副本保存为松散文件或序列化为DataContractSerializer创建的Base64-created XML。