方法序列化包含的BitmapImage类:使用2个继承类?(Method to serialize

2019-06-24 21:12发布

当我的应用程序关闭,我想序列化的一些数据,使之持续以备下次使用的应用程序。 我选择序列化这些数据与Newtonsoft.JsonConverter。 但是,我有一个BitmapImage的在我的课,它不能被序列化。

我有点停留在这一点,因为我没有找到一个解决方案,以保持我的BitmapImage到我的课(我需要保持它在这里),并能够序列化这个类。 我试图创建一个继承的类,它包含了BitmapImage的,但我不能从我的基类中创建一个隐含的操作。

我想在我的类的对象,其可用于为一个图像结合的来源,并能够序列化这个类。

Answer 1:

我建议只是“保存位图文件”,只有序列化的图像文件名。

但是,如果你必须序列位图,只需将位图保存到一个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。
然而,图像属性不是序列。
当你反序列化对象的图像将加载,因为ImagePath的制定者有必要的funcionality。

我希望这有助于,我测试了它,和它的作品。
率,如果你喜欢。 祝好运!



文章来源: Method to serialize a class which contain BitmapImage : using 2 inherited class?