将图像序列化/反序列化为XElement

时间:2011-05-04 11:15:15

标签: c# serialization xelement

我正在尝试将图像序列化为XElement,然后将其反序列化以供进一步使用。 我正在使用此方法序列化:

public XElement subElement = new XElement("Element");
private void Serialize(System.Windows.Forms.Button button) {
    if (button.Image != null) {
        var bf = new BinaryFormatter();
        var ms = new MemoryStream();
        bf.Serialize(ms, button.Image);
        var textWriter = new StringWriter();
        var writer = new XmlTextWriter(textWriter);
        byte[] imageBytes = ms.ToArray();
        writer.WriteBase64(imageBytes, 0, imageBytes.Length);
        subElement.Add(new XAttribute("Image", imageBytes));
    }
}

但我无法弄清楚如何反序列化。我试过这样的事情:

private void Deserialize(XElement element) {
    if (element.Attribute("Image") != null) {
        //tried XmlReader reader = XmlReader.Create(new StringReader(element.Attribute("Image").Value));
        //but reader is empty
        //when I try: XmlReader reader = XmlReader.Create(element.Attribute("Image").Value);
        //exception is thrown because XmlReader expects path, not element
    }
}

我基本上只需要从XElement获取字节数组,稍后我知道如何处理它。

2 个答案:

答案 0 :(得分:2)

获得字节数组后,您可以执行Convert.ToBase64String(byteArray)。该函数(字符串)的结果是XAttribute值的结果。

然后谈到阅读时,你只需byteArray = Convert.FromBase64String(element.Attribute("Image").Value)

这可以防止在XML文件中保存字符串的问题。

答案 1 :(得分:0)

不要使用序列化,从内存流中简单保存/加载。