Использование 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();
    }
}

(как предложено здесь.)

Другие вопросы по тегам