Json.Net не может сериализоваться в потоке, но работает только с тонкой сериализацией строки
Внутренне, JsonConvert.SerializeObject(obj, Formatting.Indented)
сводится к
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();
Это работает отлично. Однако, если я сделаю следующее:
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();
}
}
Тогда значение json
равно ""
. Может ли кто-нибудь указать мне на мою ошибку?
Ответы
Ответ 1
Проблема заключается в том, что после записи streamWriter
вы не сбросили
serializer.Serialize(jsonWriter, cmd);
streamWriter.Flush();
stream.Position = 0;
В качестве альтернативы, почему бы просто не использовать StringWriter
для начала?
using (var writer = new StringWriter())
{
using (var jsonWriter = new JsonTextWriter(writer))
{
serializer.Serialize(jsonWriter, cmd);
Console.WriteLine(writer.ToString());
}
}
Ответ 2
Я предполагаю, что либо JsonTextWriter
, либо StreamWriter
выполняет некоторую внутреннюю буферизацию. Поэтому попробуйте очистить jsonWriter
и/или StreamWriter
перед чтением из основного потока памяти.