2

我有一个包含 7,917 个字符的 XML 文档。它已使用 LINQ to XML 读入 XElement,但我需要将此 XElement 映射/转换/调整为字符串(以发送到 Web 服务)。

这是我的方法:

    public string AdaptXElementToString(XElement xml)
    {
        Encoding encoding = Encoding.GetEncoding(SpecializedEncodings.Iso88591);

        using (MemoryStream memoryStream = new MemoryStream())
        {
            XmlWriterSettings settings = new XmlWriterSettings { Encoding = encoding };

            memoryStream.SetLength(21*1024*1024);

            using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
            {
                xml.WriteTo(writer);
                memoryStream.Flush();

                string xmlText = encoding.GetString(memoryStream.ToArray());
                return xmlText;
            }
        }
    }

当我调用此方法时,我可以使用 Intellisense 看到“xml”包含我文件的全部内容。但是,字符串 xmlText 在第 6144 个字符处被截断(正好是 6 KB)。因为 xmlText 被砍掉了,所以我丢失了 1773 个字符。

有谁知道为什么这个方法没有返回整个字符串?我将内存流缓冲区的长度设置为 21 MB 以确保它足够大(即使默认构造函数支持调整大小)。

如果我删除对 SetLength() 的调用,我会得到相同的行为。如果我删除对 Flush() 的调用,我也会得到相同的行为。

出于我的目的,我必须使用编码 ISO-8859-1,所以我不能更改为 UTF-8 或 16。

任何帮助是极大的赞赏!

4

1 回答 1

0

解决了问题:

使用 writer.Flush(); 不是 memoryStream.Flush()

于 2012-06-08T18:58:53.863 回答