Edited at

YamlDotNetでJSONファイルをデシリアライズする!?

More than 1 year has passed since last update.


背景

プロジェクトで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という名前のくせになんて気が効くんだ...。