2012-05-28 111 views
2

當我的應用程序關閉時,我想序列化一些數據以使其對應用程序的下一次使用保持持久性。我選擇使用Newtonsoft.JsonConverter序列化這些數據。 但是,我的班裏有一個BitmapImage,它不能被序列化。序列化包含BitmapImage的類的方法:使用2個繼承類?

我有點卡在這個,因爲我沒有找到一個解決方案,以保持我的BitmapImage到我的類(我需要保留它在這裏),並能夠序列化這個類。 我試圖創建一個包含BitmapImage的繼承類,但我不允許從我的基類創建一個隱式操作符。

我想在我的類中有一個對象,它可以用作圖像綁定的源代碼,並且可以序列化此類。

回答

1

我只是建議「將BitMap保存到一個文件中」並僅序列化圖像文件名。

但是,如果您必須序列化位圖,只需將位圖以byte []形式保存到MemoryStream即可。

byte[] byteArray; 

using (MemoryStream stream = new MemoryStream()) 
{ 
     Image.Save(stream, ImageFormat.Bmp); 
     byteArray = stream.ToArray(); 
} 

更新:

通過圖像路徑系列化你的形象。

private string m_imagePath; 

    public Image Image { get; private set; } 

    public string ImagePath 
    { 
     get { return m_imagePath; } 
     set 
     { 
      m_imagePath = value; 
      Image = Image.FromFile(m_imagePath); 
     } 
    } 

更新:

[JsonObject(MemberSerialization.OptIn)] 
public class MyClass 
{ 
    private string m_imagePath; 

    [JsonProperty] 
    public string Name { get; set; } 

    // not serialized because mode is opt-in 
    public Image Image { get; private set; } 

    [JsonProperty] 
    public string ImagePath 
    { 
     get { return m_imagePath; } 
     set 
     { 
      m_imagePath = value; 
      Image = Image.FromFile(m_imagePath); 
     } 
    } 
} 

正如你所看到的,你在這裏有一個JSON對象,具有自願加入的屬性,這意味着你需要指定哪些屬性被序列化。
此演示對象具有序列化的Name屬性,它是一個序列化的ImagePath屬性。
但是,Image屬性未被序列化。
當您反序列化對象時,圖像將加載,因爲ImagePath設置器具有所需的funcionality。

我希望這可以幫助,我測試過它,它的工作原理。
費率,如果你喜歡。祝你好運!

+0

其實,我通過一個ListView中的綁定使用BitmapImage。林不知道它將工作,如果我保存圖像文件路徑。 – Rbeuque74

+0

好吧,所以如圖所示將位圖序列化爲byteArray。如果您的類實現了ISerializable,請在您的GetObjectData中確保將byteArray放入info.AddValue(「BitMapByteArray」,arr) –

+0

對不起,我沒有很好地解釋它。實際上,我在ApplicationData.LocalFolder中保存了一些圖像。我不想序列化它們,因爲它們已經在內存中。 是否可以將與本地文件路徑綁定? (我應該用file:// C:/ blabla還是隻寫C:/ blabla?) 感謝您的幫助:) – Rbeuque74