序列化包含BitmapImage的类的方法:使用2继承的类?

时间:2012-05-28 11:07:32

标签: c# serialization windows-8 windows-runtime winrt-xaml

当我的应用程序关闭时,我想序列化一些数据,使其在下次使用应用程序时保持不变。我选择使用Newtonsoft.JsonConverter序列化这些数据。 但是,我的班级中有一个BitmapImage,它无法序列化。

我有点困惑于此,因为我没有找到一个解决方案来保持我的BitmapImage进入我的类(我需要保留它)并能够序列化这个类。 我试图创建一个包含BitmapImage的继承类,但我不允许从我的基类创建一个隐式运算符。

我希望在我的类中有一个对象,它可以用作Image绑定的源,并且能够序列化这个类。

1 个答案:

答案 0 :(得分:1)

我建议只将“将BitMap保存到文件”并仅序列化图像文件名。

但是,如果必须序列化位图,只需将位图以byte []的形式保存到MemoryStream。

byte[] byteArray;

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

<强>更新

通过Image Path序列化您的图像。

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对象,它具有Opt-In属性,这意味着您需要指定序列化哪些属性。
此演示对象具有序列化的Name属性,即序列化的ImagePath属性 但是,Image属性未序列化。
当您反序列化对象时,图像将加载,因为ImagePath setter具有所需的功能
我希望这有帮助,我测试了它,并且它有效 如果你喜欢,请评价。祝你好运!