2

I want to use the DataContractJsonSerializer to serialize to file in JsonFormat. The problem is that the WriteObjectmethod only has 3 options XmlWriter, XmlDictionaryWriter and Stream.

To get what I want I used the following code:

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

Is this the only way or have I missed something?

4

2 回答 2

7

假设您只是想将文本写入文件,不清楚为什么要将其写入MemoryStream第一个文件。您可以使用:

var js = new DataContractJsonSerializer(typeof(T), _knownTypes);
using (var stream = File.Create(path))
{
    js.WriteObject(stream, item);
}

这相当简单,应该做你想做的......

于 2015-06-30T06:14:39.550 回答
5

实际上,我很害怕声称知道 Jon Skeet 不知道的东西,但是我使用了类似于以下的代码来生成 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();
    }
}

(如此处所建议

于 2017-03-13T19:47:33.080 回答