c # байтовый массив xml сериализация - PullRequest
3 голосов
/ 02 сентября 2011

Я получил байтовый массив

public byte[] values;

Я заполняю его данными

new byte[64];

Я сериализую его и получаю следующую XML-часть:

<values>
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</values>

Я нашел следующее решение здесь в SO:

[XmlElement("values", DataType = "hexBinary")]
        public byte[] values;

Теперь я получаю тот же XML, что и выше, только с «0» вместо «A».

Когда я сериализирую, например, массив Int16 / Int32 / sbyte. Я получаю что-то вроде этого в XML:

<values>0</values>
<values>0</values>
<values>0</values>

В вертикальном расположении.

Теперь мой вопрос: Можно ли получить массив байтов также в вертикальном расположении? Как:

    <values>00</values>
    <values>00</values>
    <values>00</values>

Mark

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011
public class Test
{
    public List<byte> Bytes { get; set; }
}

var xml = new XmlSerializer(typeof(Test));
xml.Serialize(File.Open("test.xml",FileMode.OpenOrCreate),
              new Test
              {
                  Bytes = new List<byte> {0,1,2,3,4,5,6,7}
              });

приводит к XML-файлу, как:

<?xml version="1.0"?>
<Test xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Bytes>
    <unsignedByte>0</unsignedByte>
    <unsignedByte>1</unsignedByte>
    <unsignedByte>2</unsignedByte>
    <unsignedByte>3</unsignedByte>
    <unsignedByte>4</unsignedByte>
    <unsignedByte>5</unsignedByte>
    <unsignedByte>6</unsignedByte>
    <unsignedByte>7</unsignedByte>
  </Bytes> 
</Test>
0 голосов
/ 02 сентября 2011

Полагаю, вам нужно явно создать новый элемент XML для каждого байта в массиве. Вы могли бы также использовать List<byte> или Array<byte> для этого вместо необработанного массива.

Как сказал the_ajp в комментарии.

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

...