Mar*_*cel 17 c# bitmap xml-serialization
我想XML-Serialize一个复杂类型(类),它具有System.Drawing.Bitmap类型的属性.
/// <summary>
/// Gets or sets the large icon, a 32x32 pixel image representing this face.
/// </summary>
/// <value>The large icon.</value>
public Bitmap LargeIcon { get; set; }
Run Code Online (Sandbox Code Playgroud)
我现在发现使用默认的XML序列化程序序列化Bitmap不起作用,因为它没有公共无参数构造函数,这对于默认的xml序列化程序是必需的.
我知道以下内容:
我宁愿不想引用另一个项目,也不想广泛调整我的类,只允许这些位图的xml序列化.
有没有办法保持这么简单?
非常感谢,马塞尔
Mar*_*ell 42
我会做的事情如下:
[XmlIgnore]
public Bitmap LargeIcon { get; set; }
[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
[XmlElement("LargeIcon")]
public byte[] LargeIconSerialized
{
get { // serialize
if (LargeIcon == null) return null;
using (MemoryStream ms = new MemoryStream()) {
LargeIcon.Save(ms, ImageFormat.Bmp);
return ms.ToArray();
}
}
set { // deserialize
if (value == null) {
LargeIcon = null;
} else {
using (MemoryStream ms = new MemoryStream(value)) {
LargeIcon = new Bitmap(ms);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以实现ISerializable并使用SerializationInfo手动处理位图内容.
编辑: João是对的:处理XML序列化的正确方法是实现IXmlSerializable,而不是ISerializable:
public class MyImage : IXmlSerializable
{
public string Name { get; set; }
public Bitmap Image { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
}
public void ReadXml(System.Xml.XmlReader reader)
{
throw new NotImplementedException();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("Name");
writer.WriteString(this.Name);
writer.WriteEndElement();
using(MemoryStream ms = new MemoryStream())
{
this.Image.Save(ms, ImageFormat.Bmp );
byte[] bitmapData = ms.ToArray();
writer.WriteStartElement("Image");
writer.WriteBase64(bitmapData, 0, bitmapData.Length);
writer.WriteEndElement();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20770 次 |
| 最近记录: |