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; }
}

ObservableCollection<;位图图像>;DataSerialize未序列化

BitmapImage根本无法使用数据合约进行序列化,您自己也无法更改这一点。

保持BitmapImage(它是一个图像)的唯一方法是使用BinaryWriterWriteableBitmap。将BitmapImage转换为byte[],反之亦然的图像转换器也会有所帮助。