2012-03-23 13 views
13

Internamente, JsonConvert.SerializeObject(obj, Formatting.Indented) si riduce aJson.Net non riesce a serializzare a un ruscello, ma funziona bene serializzazione in una stringa

JsonSerializer jsonSerializer = JsonSerializer.Create(null); 
StringWriter stringWriter = new StringWriter(new StringBuilder(256), (IFormatProvider) CultureInfo.InvariantCulture); 
using (JsonTextWriter jsonTextWriter = new JsonTextWriter((TextWriter) stringWriter)) 
{ 
    jsonTextWriter.Formatting = formatting; 
    jsonSerializer.Serialize((JsonWriter) jsonTextWriter, value); 
} 
return stringWriter.ToString(); 

Questo funziona bene. Tuttavia, se faccio la seguente:

string json; 

JsonSerializer jsonSerializer = JsonSerializer.Create(); 

using (var stream = new MemoryStream()) 
using (var streamWriter = new StreamWriter(stream, Encoding.UTF8)) 
using (var jsonWriter = new JsonTextWriter(streamWriter)) 
{ 
    serializer.Serialize(jsonWriter, cmd); 

    stream.Position = 0; 
    using (var reader = new StreamReader(stream)) 
    { 
     json = reader.ReadToEnd(); 
    } 
} 

allora il valore di json è "". Qualcuno può indicarmi il mio errore?

+0

provare a chiamare Flush() sullo scrittore; –

risposta

17

Il problema è che non si è lavata la streamWriter Dopo aver scritto:

serializer.Serialize(jsonWriter, cmd); 
streamWriter.Flush(); 
stream.Position = 0; 

alternativa, perché non basta usare un StringWriter per iniziare?

using (var writer = new StringWriter()) 
{ 
    using (var jsonWriter = new JsonTextWriter(writer)) 
    { 
     serializer.Serialize(jsonWriter, cmd); 
     Console.WriteLine(writer.ToString()); 
    } 
} 
+0

Aha! Era * il Flush mancante. Grazie. Per quanto riguarda lo stream vs stringa, non sono realmente interessato a una rappresentazione stringa. Mi viene passato un flusso che ho bisogno di compilare. Tuttavia, in origine avevo fatto un test usando le stringhe solo per sapere cosa stavo entrando, e quando la versione dello stream comparabile non funzionava, mi sono confuso. – moswald

2

immagino che sia JsonTextWriter o StreamWriter fare un po 'buffer interno. Quindi provare a scaricare lo jsonWriter e/o lo streamWriter prima di leggere dal flusso di memoria sottostante.

Problemi correlati