使用 DataContractJsonSerializer 创建非 XML Json 文件
Using DataContractJsonSerializer to create a Non XML Json file
我想使用 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);
}
}
}
这是唯一的方法还是我错过了什么?
假设您只是想将文本写入文件,不清楚为什么要先将其写入 MemoryStream
。您可以只使用:
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();
}
}
(建议 here。)
我想使用 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);
}
}
}
这是唯一的方法还是我错过了什么?
假设您只是想将文本写入文件,不清楚为什么要先将其写入 MemoryStream
。您可以只使用:
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();
}
}
(建议 here。)