2

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

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

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

4

1 回答 1

1

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

但是,如果您必须序列化位图,只需将位图作为 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 设置器具有所需的功能。

我希望这会有所帮助,我对其进行了测试,并且可以正常工作。
喜欢就评价。祝你好运!

于 2012-05-28T11:21:56.093 回答