Использование DataContractJsonSerializer для создания не XML-файла Json
Я хочу использовать DataContractJsonSerializer для сериализации в файл в JsonFormat. Проблема в том, что WriteObject
Метод имеет только 3 параметра XmlWriter, XmlDictionaryWriter и Stream.
Чтобы получить то, что я хочу, я использовал следующий код:
var js = new DataContractJsonSerializer(typeof(T), _knownTypes);
using (var ms = new MemoryStream())
{
js.WriteObject(ms, item);
ms.Position = 0;
using (var sr = new StreamReader(ms))
{
using (var writer = new StreamWriter(path, false))
{
string jsonData = sr.ReadToEnd();
writer.Write(jsonData);
}
}
}
Это единственный способ или я что-то пропустил?
2 ответа
Решение
Предполагая, что вы просто пытаетесь записать текст в файл, неясно, почему вы пишете его в MemoryStream
первый. Вы можете просто использовать:
var js = new DataContractJsonSerializer(typeof(T), _knownTypes);
using (var stream = File.Create(path))
{
js.WriteObject(stream, item);
}
Это гораздо проще, и должен делать то, что вы хотите...
Я на самом деле очень боюсь заявить, что знаю что-то, чего нет у Джона Скита, но я использовал код, подобный следующему, который создает текстовый файл Json и поддерживает надлежащие отступы:
var js = new DataContractJsonSerializer(typeof(T), _knownTypes);
using (var stream = File.Create(path))
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8, true, true, "\t"))
{
js.WriteObject(writer, item);
writer.Flush();
}
}
(как предложено здесь.)