序列化包含位图图像的类的方法:使用2个继承的类
本文关键字:使用 2个 继承 方法 图像 包含 序列化 位图 | 更新日期: 2023-09-27 18:35:28
当我的应用程序关闭时,我想序列化一些数据,使其持久化以供下次使用该应用程序。我选择使用Newtonsoft.JsonConverter序列化这些数据。但是,我的类中有一个位图图像,它无法序列化。
我有点坚持这一点,因为我找不到解决方案将我的 BitmapImage 保留在我的类中(我需要将其保留在这里)并能够序列化这个类。我尝试创建一个包含 BitmapImage 的继承类,但不允许我从基类创建隐式运算符。
我希望在我的类中有一个对象,该对象可用于 Image 绑定的源,并能够序列化此类。
我建议只"将位图保存到文件"并仅序列化图像文件名。
但是,如果必须序列化位图,只需将位图作为 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 资源库具有所需的功能。
我希望这有所帮助,我测试了它,它有效。
如果您愿意,请评分。祝你好运!