我正在尝试将图像序列化为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获取字节数组,稍后我知道如何处理它。
答案 0 :(得分:2)
获得字节数组后,您可以执行Convert.ToBase64String(byteArray)
。该函数(字符串)的结果是XAttribute值的结果。
然后谈到阅读时,你只需byteArray = Convert.FromBase64String(element.Attribute("Image").Value)
这可以防止在XML文件中保存字符串的问题。
答案 1 :(得分:0)
不要使用序列化,从内存流中简单保存/加载。