Вы не перемотали поток;он расположен в конце.Установите .Position = 0
перед прочтением.Или проще: просто сериализовать в StringWriter
или, если вы действительно хотите использовать MemoryStream
, передать (увеличенный) резервный массив из GetBuffer()
вместе с .Length
в Encoding
и позвоните GetString()
.
using(var sw = new StringWriter()) {
_queueSerializer.Value.Serialize(sw, _mostRecentPlayers.ToArray());
xml = sw.ToString();
}
или для ASCII (см. комментарии):
using(var ms = new MemoryStream()) {
var settings = new XmlWriterSettings {
Encoding = Encoding.ASCII
};
using(var xw = XmlWriter.Create(ms, settings)) {
_queueSerializer.Value.Serialize(xw, _mostRecentPlayers.ToArray());
}
xml = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length);
}
Кроме того, если только маловероятно , что вы будете сериализовать вexe, я бы предложил упростить до просто:
static readonly XmlSerializer _queueSerializer =new XmlSerializer(typeof(int[]));
Наконец, обратите внимание, что xml довольно многословен как механизм, чтобы разбрасывать некоторые целые числа.CSV может показаться намного проще (если вы хотите текст).