我遇到了一些恼人的问题,我使用一些代码将图像的字节数组序列化为XML并再次返回,在反序列化后读取字节时,某些字节会有不断的变化。
我的代码与图像格式无关,但就我的情况而言,我正在使用PNG图像(我在几个png文件上测试过)。
序列化代码:
var serializer = new XmlSerializer(instance.GetType());
using (var sw = new StringWriter())
{
serializer.Serialize(sw, instance);
return sw.ToString();
}
反序列化代码:
public T Deserialize<T>(string xml)
where T : class, new()
{
var serializer = new XmlSerializer(typeof (T));
using (var stringReader = new StringReader(xml))
{
return (T) serializer.Deserialize(stringReader);
}
}
Xml映射属性:
[System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")]
public byte[] Image
{
get
{
return this.imageField;
}
set
{
this.imageField = value;
}
}
找到差异:
嵌入字节属于用于单元测试的嵌入式图像, 合同中的图像是来自反序列化合同的字节数组图像。
embeddedBytes[73]=194, imageFromContract[73] = 192
embeddedBytes[77]=194, imageFromContract[77] = 192
embeddedBytes[79]=21, imageFromContract[79] = 106
embeddedBytes[80]=40, imageFromContract[80] = 214
embeddedBytes[81]=74, imageFromContract[81] = 137
embeddedBytes[82]=128, imageFromContract[82] = 9
这就是我获取图像字节的方式(GetImage()只是从嵌入式资源中返回Image)
public static byte[] GetImageBytes()
{
var img = GetImage();
var embeddedImageMemStream = new MemoryStream();
img.Save(embeddedImageMemStream, img.RawFormat);
return embeddedImageMemStream.ToArray();
}
如果有人能对此事有所了解,我们将不胜感激。
提前致谢
编辑:包含一张经过测试的图片,