2010-08-22 11 views
8

Tengo una cadena JSON en un MemoryStream. Estoy utilizando el siguiente código para sacarlo como una cadena ASCII:Forma rápida de obtener el contenido de un MemoryStream como una cadena ASCII

MemoryStream memstream = new MemoryStream(); 
/* Write a JSON string to memstream here */ 

byte[] jsonBytes = new byte[memstream.Length]; 
memstream.Read(jsonBytes, 0, (int)memstream.Length); 

string jsonString = Encoding.ASCII.GetString(jsonBytes); 

¿Qué es un camino más corto/más corto para hacer esto?

+0

he intentado ambos métodos - Darin y liho1eye. Ambos funcionaron bien. Ojalá pueda marcar ambos como respuesta. Me siento mal por marcar solo uno como respuesta: | Pero votando ambos :) –

+0

¿Hay alguna razón para codificar la cadena JSON en bytes y luego decodificarla de nuevo? Es posible que desee considerar utilizar un StringWriter o un StringBuilder en su lugar. – Guffa

+0

Cuando quise leer de Memstream, utilicé el método Read() por algún motivo y una de las sobrecargas mostró que escribía en matrices de bytes. Entonces usé uno. Esta es básicamente la primera vez que estoy lidiando con la clase MemoryStream, así que no sabía qué era lo mejor. Solo fui paso a paso. –

Respuesta

13

Se puede usar el método ToArray:

using (var stream = new MemoryStream()) 
{ 
    /* Write a JSON string to stream here */ 

    string jsonString = Encoding.ASCII.GetString(stream.ToArray()); 
} 
5

new StreamReader(memstream, Encoding.ASCII).ReadToEnd()

+1

Esto devolverá una secuencia en blanco si la secuencia ha sido leída previamente hasta el final. Para corregir, prefijo con "bodyStream.Seek (0, SeekOrigin.Begin);" o simplemente "memstream.Position = 0". – Contango

Cuestiones relacionadas