Я столкнулся с досадной проблемой с некоторым кодом, который я использую для сериализации байтового массива изображения в XML и обратно, когда при чтении байтов после десериализации происходят постоянные изменения в определенных байтах.
MyКод не зависит от формата изображения, но в данном случае я использую изображение 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 () просто возвращает изображение из встроенного ресурса)
public static byte[] GetImageBytes()
{
var img = GetImage();
var embeddedImageMemStream = new MemoryStream();
img.Save(embeddedImageMemStream, img.RawFormat);
return embeddedImageMemStream.ToArray();
}
Если кто-либоможет пролить некоторый свет на этот вопрос, он будет очень признателен.
Заранее спасибо
Редактировать: включены одно из протестированных изображений,