2013-07-09 3 views
0

ObservableCollection의 BitmapImage를 저장하는 클래스가 있고이 정보를 IsolatedStorage에 저장해야합니다. 나는 DataContract를 사용하여 다른 클래스의 작업을 수행하고있다. BitmapImage를 DataMember로 설정할 수 없다는 생각은 작동을 멈추는 것입니다.ObservableCollection <BitmapImage> DataSerialize가 직렬화되지 않음

오류 메시지는 다음과 같습니다

유형 'System.Windows.Media.ImageSource'직렬화 할 수 없습니다. DataContractAttribute 특성으로 표시하고 DataMemberAttribute 특성을 사용하여 직렬화 할 모든 구성원을 표시하는 것이 좋습니다.

도움을 주시면 감사하겠습니다.

CODE - 클래스

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

답변

0

BitmapImage 데이터 계약을 사용하여 간단하게 직렬화 할 수없는 자신에 의해 변경할 수있는 방법은 없습니다 - 코드가 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); 
     } 

    } 

에 저장합니다.

BitmapImage (이미지 임)을 유지하는 유일한 방법은 BinaryWriter 또는 WriteableBitmap입니다. BitmapImage를 byte []로 변환하거나 또는 그 반대로 변환하는 이미지 변환기도 도움이 될 것입니다.

+0

왜 WCF를 언급하고 있습니까? –

+0

그냥 실수, 감사합니다 – Cybermaxs

+0

WritableBitmap 및 Extensions.SaveJpeg를 사용하여 목록을 byte []로 변환했습니다. 잘 저축하고있는 것 같습니다. – Seige

관련 문제