LoginSignup
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-12-20

背景

プロジェクトで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; }
    }
}

結果はこんなかんじ。

2017-12-21_04h44_16.png

まとめ

ちゃんとJSONファイルをデシリアライズしてくれました。YamlDotNetという名前のくせになんて気が効くんだ...。

YAMLはJSONのスーパーセット(2020/03/09追記)

こんな記事を見つけたので貼っておきます。
JSON is YAML, but YAML is not JSON

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5