Sérialisation d’une BitmapImage dans WinRT

public static async Task SaveFileAsync(ssortingng 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(ssortingng 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); } } 

J’utilise ces méthodes pour sérialiser mes données, mais j’ai une classe qui contient une image,

 [DataMember] Public Image img{get;set;} 

J’essaye de le sérialiser. Je fais ce qui suit en fait

 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; 

J’ai essayé de sérialiser le bitmapImage lui-même mais c’est le même problème. Je continue à avoir cette erreur, et mon BitmapImage a un atsortingbut.

Le type ‘Windows.UI.Xaml.Media.ImageSource’ ne peut pas être sérialisé. Pensez à le marquer avec l’atsortingbut DataContractAtsortingbute et à tous les membres à sérialiser avec l’atsortingbut DataMemberAtsortingbute. Si le type est une collection, envisagez de le marquer avec CollectionDataContractAtsortingbute. Consultez la documentation Microsoft .NET Framework pour connaître les autres types pris en charge.

DataContractSerializer ne fonctionnera pas avec les images. Vous devez soit utiliser BitmapEncoder (si vous avez affaire à WriteableBitmap soit simplement sérialiser l’adresse source de votre BitmapImage . Si le bitmap a été chargé à partir d’un chemin local ou d’une URL temporaire et que vous souhaitez conserver l’intégralité du bitmap, vous ne pouvez pas extraire le BitmapImage . bitmap de BitmapImage quand même et vous devez donc télécharger le fichier source à partir de l’URL source originale ou copier le fichier local que vous avez chargé. Vous pouvez alors sauvegarder cette copie en tant que fichier détaché ou sérialiser Base64 dans votre DataContractSerializer -created. XML.