DataContractSerializer truncated string when used with MemoryStream,but works with StringWriter

We’ve used the following DataContractSerializeToXml method for a long time, but recently noticed, that it doesn’t return full XML for a long object, but  truncated it and returns XML string with the length of  multiple-of-1024 , but the reminder is not included.


 internal static string DataContractSerializeToXml<T>(T obj)
{
string strXml =
“”;
Type type= obj.GetType();//typeof(T)
DataContractSerializer serializer = new DataContractSerializer(type);
System.IO.
MemoryStream aMemStr = new System.IO.MemoryStream();
System.Xml.
XmlTextWriter writer = new System.Xml.XmlTextWriter(aMemStr, null);
serializer.WriteObject(writer, obj);
strXml = System.Text.
Encoding.UTF8.GetString(aMemStr.ToArray());
return strXml;


  
I tried to debug and searched Google for similar problems, but didn’t find explanation of the error. The most closed http://forums.codeguru.com/showthread.php?309479-MemoryStream-allocates-size-multiple-of-1024-( talking about incorrect length, but not about truncated string.

fortunately replacing MemoryStream to StringWriter according to

http://billrob.com/archive/2010/02/09/datacontractserializer-converting-objects-to-xml-string.aspx
fixed the issue.

  1: var serializer = new DataContractSerializer(tempData.GetType());
  2: using (var backing = new System.IO.StringWriter())
  3: using (var writer = new System.Xml.XmlTextWriter(backing))
  4: {
  5:     serializer.WriteObject(writer, tempData);
  6:     data.XmlData = backing.ToString();
  7: }

v