Странное поведение во время сериализации байтового массива изображения - PullRequest
0 голосов
/ 22 января 2012

Я столкнулся с досадной проблемой с некоторым кодом, который я использую для сериализации байтового массива изображения в 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();
    }

Если кто-либоможет пролить некоторый свет на этот вопрос, он будет очень признателен.

Заранее спасибо

Редактировать: включены одно из протестированных изображений, enter image description here

...