当我的应用程序关闭时,我想序列化一些数据,使其在下次使用应用程序时保持不变。我选择使用Newtonsoft.JsonConverter序列化这些数据。 但是,我的班级中有一个BitmapImage,它无法序列化。
我有点困惑于此,因为我没有找到一个解决方案来保持我的BitmapImage进入我的类(我需要保留它)并能够序列化这个类。 我试图创建一个包含BitmapImage的继承类,但我不允许从我的基类创建一个隐式运算符。
我希望在我的类中有一个对象,它可以用作Image绑定的源,并且能够序列化这个类。
答案 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具有所需的功能
我希望这有帮助,我测试了它,并且它有效
如果你喜欢,请评价。祝你好运!