2012-06-08 11 views
2

XML 문서가 7,917 자입니다. LINQ to XML을 사용하여 XElement로 읽었지만이 XElement를 문자열로 매핑 (변환)/변환/조정 (웹 서비스로 보내기)해야합니다.MemoryStream이 6KB의 데이터로 제한되는 이유는 무엇입니까?

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; 
      } 
     } 
    } 

나는이 메서드를 호출 할 때, 나는 'XML은'내 파일의 전체 내용을 가지고 인텔리을 사용하여 볼 수 있습니다

여기 내 방법입니다. 그러나 xmlText 문자열은 6144 번째 문자 (정확히 6KB)에서 잘립니다. xmlText가 잘려나 가기 때문에 1773 개의 문자가 손실됩니다.

누구나이 방법이 전체 문자열을 반환하지 않는 이유를 알고 있습니까? (기본 생성자가 크기 조정을 지원하더라도) 메모리 스트림 버퍼의 길이를 21MB로 설정하여 충분히 커야합니다.

SetLength()에 대한 호출을 제거하면 동일한 문제가 발생합니다. Flush()에 대한 호출을 제거하면 동일한 동작을 얻습니다. 내 목적을 위해

, 나는 ISO-8859-1 인코딩 사용, 그래서 UTF-8 또는 16

어떤 도움을 변경할 수 없습니다 것은 대단히 감사합니다!

+0

memoryStream은 문자열로 변환되기 전에 예상 길이가됩니까? –

답변

0

문제 해결 :

사용 writer.Flush을(); not memoryStream.Flush()

관련 문제