0

我有一个存储 BitmapImage 的 ObservableCollection 的类,我需要将此信息存储在 IsolatedStorage 中。我正在使用 DataContract 与其他有效的类一起执行此操作。我认为无法将 BitmapImage 设置为 DataMember 正在阻止它工作。

错误信息是:

无法序列化类型“System.Windows.Media.ImageSource”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。

任何帮助,将不胜感激。

代码 - 保存到独立存储

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

1 回答 1

0

BitmapImage 根本无法使用数据协定进行序列化,并且无法自行更改。

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

于 2013-07-10T07:27:07.790 回答