Reading from memory stream to string
c#, memorystream, xml-serialization, xmlserializer
Solution
If you'd checked the results of `stream.Read`, you'd have seen that it hadn't read anything - because you haven't rewound the stream. (You could do this with `stream.Position = 0;`.) However, it's easier to just call `ToArray`:
settingsString = LocalEncoding.GetString(stream.ToArray());
(You'll need to change the type of `stream` from `Stream` to `MemoryStream`, but that's okay as it's in the same method where you create it.)
Alternatively - and even more simply - just use `StringWriter` instead of `StreamWriter`. You'll need to create a subclass if you want to use UTF-8 instead of UTF-16, but that's pretty easy. See this answer for an example.
I'm concerned by the way you're just catching `Exception` and assuming that it means something harmless, by the way - without even logging anything. Note that `using` statements are generally cleaner than writing explicit `finally` blocks.
Problem
I am trying to write an object to an Xml string and take that string and save it to a DB. But first I need to get the string... ``` private static readonly Encoding LocalEncoding = Encoding.UTF8; public static string SaveToString<T> (T settings) { Stream stream = null; TextWriter writer = null; string settingsString = null; try { stream = new MemoryStream(); var serializer = new XmlSerializer(typeof(T)); writer = new StreamWriter(stream, LocalEncoding); serializer.Serialize(writer, settings); var buffer = new byte[stream.Length]; stream.Read(buffer, 0, (int)stream.Length); settingsString = LocalEncoding.GetString(buffer); } catch (Exception ex) { // If the action cancels we don't want to throw, just return null. } finally { if (stream != null) stream.Close(); if (writer != null) writer.Close(); } return settingsString; } ``` This seems to work, the stream gets filled with bytes. But when I come to read it back into the buffer and then into the string... the buffer is filled with '0'! Not sure what I doing wrong here guys.