我想使用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);
}
}
}
这是唯一的方式还是我错过了什么?
答案 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。)