【问题标题】:Bitmap XML Serialization [duplicate]位图 XML 序列化 [重复]
【发布时间】:2013-01-15 14:12:40
【问题描述】:

可能重复:
Serialize a Bitmap in C#/.NET to 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>

【问题讨论】:

标签: c# .net xml-serialization


【解决方案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 时做得很好。

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多