背景
プロジェクトでYamlDotNetを使っているのですが、デフォルト設定のデシリアライザでYAMLファイルだけでなくJSONファイルもデシリアライズできるということに気づき、名前からは想像できない挙動に驚いたので簡単な記事にしてTipsとして共有します。
環境
YamlDotNetのv4.2.3 を使いました。
プロジェクトはコンソールアプリとして立ち上げました。
ソースコード
以下のようなJSONファイルをデシリアライズしてみます。
{
"Number": 1,
"Text1": "Hello, World!",
"Text2": "Hello, YamlDotNet!"
}
コードはこんなかんじ。
using System;
using System.IO;
using System.Text;
using YamlDotNet.Serialization;
namespace ReadJsonUsingYamlDotNet
{
class Program
{
static void Main(string[] args)
{
// デシリアライザをデフォルトの設定で生成
var builder = new DeserializerBuilder();
var deserializer = builder.Build();
// ファイルの内容をSomeObjectにデシリアライズ
SomeObject deserializedObj = null;
string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Data\Data.json");
using (var data = new StreamReader(filepath, Encoding.UTF8))
{
deserializedObj = deserializer.Deserialize<SomeObject>(data);
}
// 結果をコンソール出力
Console.WriteLine(string.Format("Number : {0}", deserializedObj.Number));
Console.WriteLine(string.Format("Text1 : {0}", deserializedObj.Text1));
Console.WriteLine(string.Format("Text2 : {0}", deserializedObj.Text2));
Console.ReadKey();
}
}
class SomeObject
{
public int Number { get; set; }
public string Text1 { get; set; }
public string Text2 { get; set; }
}
}
結果はこんなかんじ。
まとめ
ちゃんとJSONファイルをデシリアライズしてくれました。YamlDotNetという名前のくせになんて気が効くんだ...。
YAMLはJSONのスーパーセット(2020/03/09追記)
こんな記事を見つけたので貼っておきます。
JSON is YAML, but YAML is not JSON