2012-03-23 2 views
13

Intern kocht JsonConvert.SerializeObject(obj, Formatting.Indented) zuJson.Net nicht in einen Stream serialisiert, aber funktioniert gut Serialisierung in einen String

unten
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(); 

Das funktioniert ganz gut. Wenn ich jedoch Folgendes tun:

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(); 
    } 
} 

Dann wird der Wert von json ist "". Kann mir jemand auf meinen Fehler hinweisen?

+0

versuchen, Flush() auf Writer aufrufen; –

Antwort

17

Das Problem ist, dass Sie nicht die streamWriter nach dem Schreiben gespült haben:

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

Alternativ warum nicht nur ein StringWriter verwenden, um mit zu beginnen?

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

Aha! Es war * der fehlende Flush. Vielen Dank. Was die Stream-vs-String-Sache betrifft, so bin ich eigentlich nicht an einer String-Repräsentation interessiert. Mir wird ein Strom übergeben, den ich füllen muss. Allerdings habe ich ursprünglich einen Test mit Strings gemacht, nur um zu wissen, worauf ich mich einlasse, und als die vergleichbare Stream-Version nicht funktionierte, war ich verwirrt. – moswald

2

Ich denke, dass entweder JsonTextWriter oder StreamWriter einige interne Pufferung tun. Versuchen Sie also, die jsonWriter und/oder die streamWriter vor dem Lesen aus dem zugrunde liegenden Speicher-Stream zu leeren.

Verwandte Themen