C# 如何将XmlDocument转换为数组<;字节>;?

C# 如何将XmlDocument转换为数组<;字节>;?,c#,.net,xml,bytearray,C#,.net,Xml,Bytearray,我构造了一个数组,现在我想把它转换成一个数组。如何做到这一点 谢谢,将其写入a,然后调用流: using System; using System.IO; using System.Text; using System.Xml; class Test { static void Main(string[] args) { XmlDocument doc = new XmlDocument(); XmlElement root = doc.Crea

我构造了一个数组,现在我想把它转换成一个数组。如何做到这一点

谢谢,

将其写入a,然后调用流:

using System;
using System.IO;
using System.Text;
using System.Xml;

class Test
{
    static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("root");
        XmlElement element = doc.CreateElement("child");
        root.AppendChild(element);
        doc.AppendChild(root);

        MemoryStream ms = new MemoryStream();
        doc.Save(ms);
        byte[] bytes = ms.ToArray();
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
}
要对格式进行更多控制,您可以从流中创建
XmlWriter
,并使用
XmlDocument.WriteTo(writet)
尝试以下操作:

using System.Text;
using System.Xml;

XmlDocument dom = GetDocument()
byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml);
如果要保留文档的文本编码,请将
默认编码更改为所需编码,或按照以下步骤操作。

:谢谢!你的密码在钱上是对的!以下是我如何解决我的特殊角色问题:

    public static byte[] ConvertToBytes(XmlDocument doc)
    {
        Encoding encoding = Encoding.UTF8;
        byte[] docAsBytes = encoding.GetBytes(doc.OuterXml);
        return docAsBytes;
    } 

这是我到目前为止一直使用的解决方案。问题在于,对于大型XML文档,这会抛出OutOfMemoryException:/dom.OuterXml和dom.Save之间的另一个区别是,OuterXml在一个长行中包含XML数据,没有格式化。Save方法生成带缩进的格式化XML文档。如果要将MemoryStream作为输入传递给其他对象,请记住将位置设置回零。文件保存(ms);ms.Position=0;我知道字节大小取决于编码,但我想知道这有多有效。(我这样问是因为我的应用程序需要经常这样做(至少每秒10次。)给MemoryStream一个初始大小有意义吗?考虑到这一点,有没有办法从XmlDocument中获得预期大小的概念?@codesniffer:你可以每秒做10次非常多的工作。除非文档特别大,否则我不会担心。至于你是否应该给
MemoryStream
初始大小:你比我更适合用你的数据对其进行基准测试。如果你关心性能,你应该仔细测量它。这让你可以尝试更改。@JonSkeet感谢Jon。不幸的是,数据大小来自我的库的调用者,可能遍布整个地图——KBs到MBs,甚至可能更大(没有明确的限制)。有没有办法从XmlDocument中获得预期大小的概念?@codesniffer:如果您只关心大小而不关心数据,您可以编写自己的
实现,该实现丢弃了它传递的所有数据,但保留了它的计数。您是否有任何具体的理由对此感到担忧,例如bug报告来自用户?还是在潜在问题真正成为问题之前,你在想潜在的问题?