Присвоить текст писателю памяти - PullRequest
3 голосов
/ 12 марта 2012

Я пишу файл xml, но мне не хватает определенного значения для определенного поля. Я проверяю, что когда приходит объект, который содержит значение, конкретное значение существует, но после записи xml значение не существует.

Это код, который я использую, я думаю, XmlTextWriter может быть причиной неправильного xml.

Есть еще один метод, который можно использовать для этого, это TextWriter, но он не смог преобразовать в поток памяти.

string xmlString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
// XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.ASCII);
TextWriter xmlTextWriter=new StreamWriter(memoryStream,Encoding.ASCII);
xs.Serialize(xmlTextWriter, obj);
memoryStream =(MemoryStream)xmlTextWriter.    
//(MemoryStream)xmlTextWriter.BaseStream;
xmlString = ASCIIByteArrayToString(memoryStream.ToArray()); 
return `xmlString;`

Любая идея, как я могу знать, почему и где возникает проблема.

Ответы [ 2 ]

6 голосов
/ 12 марта 2012

Я думаю, что вы слишком усложняете это потоком памяти.Вы можете сериализовать в StringWriter (который является производным от TextWriter), а затем вызвать ToString (), если хотите получить строку XML.

XmlSerializer xs = new XmlSerializer(typeof(T));
StringWriter sw = new StringWriter();
xs.Serialize(sw, obj);
return sw.ToString();
0 голосов
/ 12 марта 2012

Попробуйте правильно распорядиться ресурсами IDisposable, заключив их в операторы:

public string SerializeToXml<T>(T obj)
{
    using (var stream = new MemoryStream())
    {
        var xs = new XmlSerializer(typeof(T));
        xs.Serialize(stream, obj);
        return Encoding.UTF8.GetString(stream.ToArray());
    }
}
...