0

可能重复:
将 C#/.NET 中的位图序列化为 XML

我正在尝试使用 XmlSerializer 序列化 MyClass,但看起来 [XmlInclude(typeof(Bitmap))] 不起作用。

using System;
using System.Drawing;
using System.IO;
using System.Xml.Serialization;

class Program {
    static void Main() {
        var myClass = new MyClass {
            Name = "foo",
            MyImage = new Bitmap(@"e:\pumpkin.jpg")
        };

        var serializer = new XmlSerializer(typeof(MyClass));
        var fileStream = File.OpenWrite(@"e:\test.xml");
        serializer.Serialize(fileStream, myClass);
    }
}

[Serializable]
[XmlInclude(typeof(Bitmap))]
public class MyClass {
    public string Name { get; set; }
    public Bitmap MyImage { get; set; }
}

这是生成的文件:

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>foo</Name>
  <MyImage>
    <Palette />
  </MyImage>
</MyClass>
4

1 回答 1

1

您可以创建一个将位图获取/设置为字节数组的属性。这应该是由序列化器编码的 base-64。

public byte[] MyImageBytes {
    get {
       ImageConverter converter = new ImageConverter();
       return (byte[])converter.ConvertTo(MyImage, typeof(byte[]));
    }
}

您可能还希望使用 [XmlIgnore] 属性隐藏您的 Bitmap 属性。您可能还希望 LinqToXml 优于序列化程序,因为它为您提供了更多控制权。

请注意,XmlSerializer 在 base-64 编码时性能很差。LinqToXml 也是如此,但 BitConverter 类在转换为 base-64 方面做得很好。

于 2013-01-15T14:25:37.757 回答