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文字が失われています。

このメソッドが文字列全体を返さない理由を誰かが知っていますか?メモリストリームバッファの長さを21MBに設定して、十分な大きさになるようにしました(デフォルトのコンストラクタはサイズ変更をサポートしていますが)。

SetLength()の呼び出しを削除しても、同じ動作が得られます。Flush()の呼び出しを削除しても、同じ動作が得られます。

私の目的では、エンコーディングISO-8859-1を使用する必要があるため、UTF-8または16に変更することはできません。

どんな助けでも大歓迎です!

4

1 に答える 1

0

問題を解決しました:

writer.Flush();を使用します。memoryStream.Flush()ではありません

于 2012-06-08T18:58:53.863 に答える