C# 将XML文件转换为二进制格式文件后缺少XML标头

C# 将XML文件转换为二进制格式文件后缺少XML标头,c#,xml,excel,bytearray,C#,Xml,Excel,Bytearray,我有个问题。我有一个XML电子表格文件,我正试图通过电子邮件发送。所以我转换成一个二进制文件,并将其附加到电子邮件中。问题是当我试图打开它(在Excel上)时,它没有显示我保存的数据。当我像打开XML文件一样打开它时,我意识到它没有保存XML头: 它应该是: <?xml version="1.0" encoding="utf-8"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:sche

我有个问题。我有一个XML电子表格文件,我正试图通过电子邮件发送。所以我转换成一个二进制文件,并将其附加到电子邮件中。问题是当我试图打开它(在Excel上)时,它没有显示我保存的数据。当我像打开XML文件一样打开它时,我意识到它没有保存XML头:
它应该是:

<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
...
<Styles>
...
</Styles>
<Worksheet>
...
</Worksheet></Workbook>
我如何解决这个问题?
谢谢。

我想我们需要更多关于如何转换XML文件的信息

根据您的描述,听起来好像您已将Excel电子表格保存为XML,并且出于任何原因,您都不能将此文本文档附加到电子邮件中。我猜您正在使用一种方法来附加XML文件,该文件需要一个字节数组,而不能只提供一个文件位置。如果你能提供更多这方面的信息,这将有助于我们找出你哪里出了问题

我真正感兴趣的是:

我尝试过使用xmldocument,但没有成功,我也尝试过 正在使用字符串,但仍不起作用

你是怎么试的?您是否使用FileStream从磁盘读取文件?如果是这样,您应该能够检索文件的完整内容

您是否一直在使用XmlDocument并尝试XmlDocument.OuterXml?这可能不会提供控件头,因为它们不是根节点内XML主体的一部分

所以我真的想尝试两件事。首先,如果我在磁盘上有一个XML文件,需要通过代码将其附加到电子邮件,并且我唯一的选择是提供一个字节数组,那么我会执行以下操作:

using (FileStream fs = new FileStream("", FileMode.Open, FileAccess.Read))
{
    byte[] binaryFile = new byte[fs.Length];
    fs.Read(binaryFile, 0, buff.LongLength);

    //Copy the byte array to your email object.
}

现在,如果这不是您正在做的事情,那么您需要提供更多详细信息,说明您从什么开始(磁盘上的文件?),需要做什么(发送自动电子邮件?),您有哪些约束以及任何其他可能限制潜在解决方案的信息。

我发现了我的错误:我没有序列化XML文件,所以转换后它只显示数据,而不显示XML头。所以有两种方法可以解决这个问题:
首先,我们可以将标头与数据字符串连接起来,也可以使用serialize函数

我认为你误解了很多涉及的概念。但是如果没有更多的细节,就很难引导你走向正确的方向。举个例子:在将xml文件附加到电子邮件之前,不需要转换它们。你为什么这么认为?我想将一个XML文件附加到一封电子邮件,因此我需要将该文件转换为二进制数组,以便使用MailMessage类将其附加到电子邮件。
UTF8Encoding encoding = new UTF8Encoding();
binaryFile = encoding.GetBytes(xmlFile);
using (FileStream fs = new FileStream("", FileMode.Open, FileAccess.Read))
{
    byte[] binaryFile = new byte[fs.Length];
    fs.Read(binaryFile, 0, buff.LongLength);

    //Copy the byte array to your email object.
}