从XML文件中提取byte []

flashkid10

成员
已加入
2016年12月9日
留言内容
16
编程经验
Beginner
我目前有一个系统,可以将图像存储到类实例中的byte [](封面)上。我正在尝试从类实例中提取一个byte [],但我不知道该怎么做。

我正在使用的代码是

List<Item> information;

information = (from e in XDocument.Load("AniListData.xml").Root.Elements("Item")
               select new Item
                      {
                          Name = (string)e.Element("Name"),
                          Age = (int)e.Element("Age"),
                          Cover = // What do i put here to extract the byte[]
                      }).ToList();
 

flashkid10

成员
已加入
2016年12月9日
留言内容
16
编程经验
Beginner
我不知道你是什么意思 字符串表示形式,但我将数组存储在 物品类中的public byte [],然后通过包含以下内容的方法将其保存到XML

公共静态无效SaveData(列表<Item>obj,字符串文件名)
{
XmlSerializer sr =新的XmlSerializer(obj.GetType());
TextWriter writer =新的StreamWriter(filename);
sr.Serialize(writer,obj);
writer.Close();
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
您是否尝试过完全按照其他属性进行操作?如果您仅使用:
覆盖 = (byte[])e.Element("Cover")

怎么了?我只能真正想到两种可能性:

1.它将按原样工作。
2.它将引发异常。

在#2的情况下,错误消息将为您提供提示您必须执行的操作。如果它说您不能将字符串转换为字节数组,则说明您需要自己执行转换。如JohnH所说,数据很可能是使用base-64编码的,因此您可以尝试通过以下方式尝试对其进行解码:
覆盖 = Convert.FromBase64String((string)e.Element("Cover"))
 

flashkid10

成员
已加入
2016年12月9日
留言内容
16
编程经验
Beginner
它抛出 两种情况下都例外

引发异常:mscorlib.dll中的“ System.ArgumentNullException”
附加信息:值不能为null。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,051
地点
挪威
编程经验
10+
我不知道您用字符串表示的意思是什么,
XML文件文件中的所有内容都是文本,非文本的数据在写入xml之前必须先转换为文本。
但我将数组存储在Item类的公共byte []中,并通过包含以下内容的方法将其保存到XML

公共静态无效SaveData(列表<Item>obj,字符串文件名)
{
XmlSerializer sr =新的XmlSerializer(obj.GetType());
TextWriter writer =新的StreamWriter(filename);
sr.Serialize(writer,obj);
writer.Close();
}
XmlSerializer会将字节数组数据转换为Base64字符串。例子:
HTML:
<example>aGVsbG8gc2VyaWFsaXphdGlvbg==</example>
如果没有数组(空),则元素不会写入xml,如果有空数组,则它将写入没有数据的元素。
HTML:
<example />
 
最佳 底部