使用DataContractJsonSerializer创建非XML Json文件

时间:2015-06-30 06:10:21

标签: c# json serialization datacontractjsonserializer

我想使用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 个答案:

答案 0 :(得分:5)

假设您只是尝试将文本写入文件,则不清楚为什么要先将其写入MemoryStream。你可以使用:

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

这比较简单,应该做你想做的......

答案 1 :(得分:4)

我实际上非常害怕声称知道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();
    }
}

(如建议here。)