我想阅读图片文件(png,jpg等)。 并保存xml文件,从xml加载图像。
但首先。反序列化抛出System.InvalidOperationException。
第二。我不知道下面的方法是否正确。
的方案。
1.从hdd打开图像文件
2.在我的应用程序中保存文档(带有像'SomeClass'之类的图像的文本)
3.保存文档时,应用程序将使用图像序列化SomeClass
4.重新运行应用程序,并加载xml文件
5.然后,在我的申请中显示图像。
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(@"C:\z.jpg")))
{
StreamReader sr = new StreamReader(ms);
someClass.ImageData = sr.ReadToEnd();
Xml.Serialize<SomeClass>(someClass, @"C:\z.xml");
}
SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml");
BitmapImage image = new BitmapImage();
image.BegineInit();
image.Source = ??
image.EndInit();
System.Windows.Controls.Image imageControl = new Image();
imageControl.Source = image;
this.Content = imageControl;
这是序列化,反序列化静态方法。
public static class Xml
{
public static void Serialize<T>(T data, string path)
{
XmlSerializer s = new XmlSerializer(typeof(T));
using (FileStream fs = new FileStream(path, FileMode.Create))
{
s.Serialize(fs, data);
}
}
public static T Deserialize<T>(string path)
{
XmlSerializer s = new XmlSerializer(typeof(T));
using (FileStream fs = new FileStream(path, FileMode.Open))
{
fs.Position = 0;
return (T)s.Deserialize(fs);
}
}
}
这是SomeClass
[Serializable]
public class SomeClass
{
public string ImageData { get; set; }
public string TextData { get; set; }
}
谢谢。
答案 0 :(得分:3)
您需要将二进制图像数据转换为字符串。您可以使用Convert方法来处理它。
编辑备注 - 注意到您正在将所有字节读入内存流,然后再从流式读取器中读取它们。它会简化代码直接读取它并将这些字节转换为Base64。
以下示例。
someClass.ImageData = Convert.ToBase64String(File.ReadAllBytes(@"C:\z.jpg"));
Xml.Serialize<SomeClass>(someClass, @"C:\z.xml");
------------------
SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml");
BitmapImage image = new BitmapImage();
image.BegineInit();
image.Source = Convert.FromBase64String(someClass.ImageData);
image.EndInit();