ObservableCollection <bitmapimage> DataSerialize不序列化</bitmapimage>

时间:2013-07-09 23:21:29

标签: c# .net windows-phone-7

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

错误信息是:

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

任何帮助都将不胜感激。

代码 - 保存到IsolatedStorage

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

    }

CODE - Class

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

1 个答案:

答案 0 :(得分:0)

BitmapImage根本无法使用数据合约进行序列化,因此无法自行更改。

保留BitmapImage(它的图像)的唯一方法是使用BinaryWriterWriteableBitmap。用于将BitmapImage转换为byte []的图像转换器反之亦然。