序列化包含位图图像的类的方法:使用2个继承的类

本文关键字:使用 2个 继承 方法 图像 包含 序列化 位图 | 更新日期: 2023-09-27 18:35:28

当我的应用程序关闭时,我想序列化一些数据,使其持久化以供下次使用该应用程序。我选择使用Newtonsoft.JsonConverter序列化这些数据。但是,我的类中有一个位图图像,它无法序列化。

我有点坚持这一点,因为我找不到解决方案将我的 BitmapImage 保留在我的类中(我需要将其保留在这里)并能够序列化这个类。我尝试创建一个包含 BitmapImage 的继承类,但不允许我从基类创建隐式运算符。

我希望在我的类中有一个对象,该对象可用于 Image 绑定的源,并能够序列化此类。

序列化包含位图图像的类的方法:使用2个继承的类

我建议只"将位图保存到文件"并仅序列化图像文件名。

但是,如果必须序列化位图,只需将位图作为 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 对象,它具有 Opt-In 属性,这意味着您需要指定序列化哪些属性。
此演示对象具有序列化的 Name 属性和序列化的 ImagePath 属性。
但是,Image 属性不会序列化。
反序列化对象时,将加载图像,因为 ImagePath 资源库具有所需的功能。

我希望这有所帮助,我测试了它,它有效。
如果您愿意,请评分。祝你好运!