我有一个XML文档,共有7,917个字符。它使用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。
非常感谢任何帮助!
答案 0 :(得分:0)
解决了问题:
使用writer.Flush();不是memoryStream.Flush()