C#字节数组XML序列化

3

我得到了一个字节数组

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>

马克


1
你尝试过将List<byte>序列化吗? - albertjan
当我尝试序列化一个列表时,出现了错误。我认为这是不可能的。“反映类型时出错'...'”对不起:我忘记删除DataType Xml标签。它可以工作! - Mark
List<byte> 正是我正在寻找的。感谢 the_ajp。 - Mark
2个回答

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>

0

我猜你需要为数组中的每个字节显式地创建一个新的XML元素。你可以使用List<byte>Array<byte>来代替原始数组。

正如the_ajp在评论中所说。

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


1
我提到的是你说的 :) - Tony The Lion
1
谢谢,我已经在上面评论了,我忘记删除 DataType = heyBinary 部分。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接