2

アプリケーションを閉じたら、データをシリアル化して、アプリケーションを次に使用するために永続的にする必要があります。Newtonsoft.JsonConverterを使用してこれらのデータをシリアル化することを選択します。しかし、クラスにBitmapImageがあり、シリアル化できません。

BitmapImageをクラスに保持し(ここに保持する必要があります)、このクラスをシリアル化できる解決策が見つからないため、これに少し固執しています。BitmapImageを含む継承クラスを作成しようとしましたが、基本クラスから暗黙の演算子を作成することは許可されていません。

画像バインディングのソースとして使用できるオブジェクトをクラスに含め、このクラスをシリアル化できるようにしたい。

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);
        }
    }
}

ご覧のとおり、ここにはOpt-In属性を持つjsonオブジェクトがあります。つまり、シリアル化するプロパティを指定する必要があります。
このデモオブジェクトには、シリアル化されたNameプロパティ、シリアル化されたImagePathプロパティがあります。
ただし、Imageプロパティはシリアル化されていません。
オブジェクトを逆シリアル化すると、ImagePathセッターに必要な機能があるため、画像が読み込まれます。

これがお役に立てば幸いです。テストしてみましたが、機能します。
必要に応じて評価してください。幸運を!

于 2012-05-28T11:21:56.093 に答える