ObservableCollection<;位图图像>;DataSerialize未序列化
本文关键字:DataSerialize 序列化 gt 位图 lt ObservableCollection 图像 | 更新日期: 2023-09-27 18:21:39
我有一个存储BitmapImage的ObservableCollection的类,我需要将这些信息存储在IsolatedStorage中。我正在使用DataContract与其他类一起完成这项工作。我认为不能将BitmapImage设置为DataMember会使其无法工作。
错误消息为:
无法序列化类型"System.Windows.Media.ImageSource"。请考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记所有要序列化的成员。
如有任何帮助,我们将不胜感激。
CODE-保存到隔离存储
public static void AddOrUpdateUnsavedItems(string key, List<ProcessClass> unsavedItems)
{
var store = IsolatedStorageFile.GetUserStoreForApplication();
if (store.FileExists("unsaveditem"))
{
store.DeleteFile("unsaveditem");
}
using (var stream = new IsolatedStorageFileStream("unsaveditem", FileMode.OpenOrCreate, FileAccess.Write, store))
{
DataContractSerializer dcs = new DataContractSerializer(typeof(List<ProcessClass>));
dcs.WriteObject(stream, unsavedItems);
}
}
代码-类
[DataContract]
public class ProcessClass
{
ObservableCollection<BitmapImage> images = new ObservableCollection<BitmapImage>();
[DataMember]
public ObservableCollection<BitmapImage> Images
{
get { return images; }
set { images = value; }
}
[DataMember]
public string Notes { get; set; }
[DataMember]
public string ItemID { get; set; }
}
BitmapImage根本无法使用数据合约进行序列化,您自己也无法更改这一点。
保持BitmapImage
(它是一个图像)的唯一方法是使用BinaryWriter
或WriteableBitmap
。将BitmapImage转换为byte[],反之亦然的图像转换器也会有所帮助。