C# 使用DataContractJsonSerializer创建非XML Json文件
我想使用DataContractJsonSerializer以JsonFormat序列化到文件。 问题在于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(
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应用程序已经安装在客户的位置,所以向后兼容性和无数据丢失是必须的。。。