「ビットマップをファイルに保存する」だけで、画像ファイル名のみをシリアル化することをお勧めします。
ただし、ビットマップをシリアル化する必要がある場合は、ビットマップを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セッターに必要な機能があるため、画像が読み込まれます。
これがお役に立てば幸いです。テストしてみましたが、機能します。
必要に応じて評価してください。幸運を!