C# 使用DataContractJsonSerializer创建非XML Json文件

C# 使用DataContractJsonSerializer创建非XML Json文件,c#,json,serialization,datacontractjsonserializer,C#,Json,Serialization,Datacontractjsonserializer,我想使用DataContractJsonSerializer以JsonFormat序列化到文件。 问题在于WriteObject方法只有3个选项XmlWriter、xmldiactionarywriter和Stream 为了得到我想要的,我使用了以下代码: var js = new DataContractJsonSerializer(typeof(T), _knownTypes); using (var ms = new MemoryStream()) { js.WriteObject(

我想使用DataContractJsonSerializer以JsonFormat序列化到文件。 问题在于
WriteObject
方法只有3个选项XmlWriter、xmldiactionarywriter和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);             
       }
   }
}

这是唯一的方法还是我遗漏了什么?

假设您只是试图将文本写入一个文件,不清楚为什么要先将其写入
内存流。您只需使用:

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

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

事实上,我很害怕声称知道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();
    }
}

(如建议的那样。)

谢谢!昨天深夜:)。。。还有一个问题。可以缩进文本文件吗?因为现在我得到了一条很长的线……“阿米特拉兹:我不知道,你可能想考虑使用JSON.NET代替:”我尝试使用JSON.NET不幸的是,自从我们使用DATACONTROTTROLISTION,到现在为止,一些人把字典的关键设置到Tuples,这样,Json.Net不能很好地处理的事情…@AmitRaz:嗯。从长远来看,我肯定会朝着Json.Net的方向努力。但我很感激这可能不是你现在能做的事情。我已经努力让它工作了好几天。问题是,out应用程序已经安装在客户的位置,所以向后兼容性和无数据丢失是必须的。。。