c#字节数组xml序列化

时间:2011-09-02 11:27:11

标签: c# xml-serialization bytearray

我有一个字节数组

public byte[] values;

我用数据填充

new byte[64];

我序列化它,我得到以下XML部分:

<values>
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</values>

我在SO中找到了以下解决方案:

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

现在我使用“0”而不是“A”获得与上面相同的XML。

当我序列化时,例如一个Int16 / Int32 / sbyte数组。我在XML中得到这样的东西:

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

采用垂直安排。

现在我的问题:是否可以在垂直排列中获得字节数组?赞:

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

标记

2 个答案:

答案 0 :(得分:4)

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>

答案 1 :(得分:0)

我猜你必须明确地为数组中的每个字节创建一个新的XML元素。您也可以使用List<byte>Array<byte>来代替原始数组。

正如the_ajp在评论中所说。

如果您在尝试序列化列表时遇到错误,那么您做错了。发布代码,也许我们可以提供帮助。