C#でJsonをシリアライズする一つの方法に DataContractJsonSerializerがある。
これを使ってファイルに書き込むためには以下のように記述する。
public void Save(T data)
{
using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
{
var serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(fs,data);
}
}
インデントされずに1行で出力されてしまうのだが設定ファイルだとかに使いたい場合は不便。
何とかできないものかと逆コンパイルして追ってみるとWriteObjectは
JsonReaderWriterFactory.CreateJsonWriterなるものを使っているそう。
WriteObjectはXmlWriterでもオーバーロードされているので、このCreateJsonWriterで作ったWriterを以下のように渡せば、インデントが可能となる。
public void Save(T data)
{
using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(fs, Encoding.UTF8, true, true))
{
var serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(writer, data);
}
}