我有一个使用以下代码序列化的byte[]
:
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
问题是序列化的数据如下所示:
iVBORw0KGgoAAAANSUhEUgAAAPAAAAFACAIAAAANimYEAAAAAXNSR0IArs4c6QAAAARnQU1BAACx......
当它存储在我的数据库中时,它看起来像这样:
0x89504E470D0A1A0A0000000D49484452000000F00000014008020000000D8A660400000001......
有什么区别,如何将磁盘中的数据恢复为byte[]
?
注意:数据是Bitmap
格式为png,如下所示:
public byte[] ImageAsBytes
{
get
{
if (_image != null)
{
MemoryStream stream = new MemoryStream();
_image .Save(stream, ImageFormat.Png);
return stream.ToArray();
}
else
{
return null;
}
}
set
{
MemoryStream stream = new MemoryStream(value);
_image = new Bitmap(stream);
}
}
答案 0 :(得分:3)
iVBORw0KGgoAAAANSUhEUgAAAPAAAAFACAIAAAANimYEAAAAA...
是二进制数据的base64编码表示。
0x89504E470D0A1A0A0000000D49484452000000F000000140080...
是十六进制的。
要从磁盘获取数据,请使用XmlSerializer并将其反序列化为原始对象:
public static T DeserializeObject<T>(string filename)
{
var serializer = new XmlSerializer(typeof(T));
using (var reader = XmlReader.Create(filename))
{
return (T)serializer.Deserialize(reader);
}
}
但是如果你只有base64字符串表示,你可以使用FromBase64String方法:
byte[] buffer = Convert.FromBase64String("iVBORw0KGgoAAANimYEAAAAA...");
备注:确保始终处理一次性资源,例如流和文本阅读器和编写者。您的SerializeObject<T>
方法以及ImageAsBytes
属性的getter和setter中似乎不是这种情况。