0

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

    }

コード - クラス

[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 はデータ コントラクトを使用して単純にシリアル化できず、これを自分で変更する方法はありません。

BitmapImagea (画像)を永続化する唯一の方法は、 BinaryWriterorを使用することWriteableBitmapです。BitmapImage を byte[] に、またはその逆に変換するための画像コンバーターも役立ちます。

于 2013-07-10T07:27:07.790 に答える