2012/06/17(Sun)Jsonほぼ互換の似非バリアント的な何か。

はてブ数 2012/06/17 18:22 プログラミング::C# つーさ

似非バリアント もしくは、似非JSONオブジェクト。
Jsonパーサ・フォーマッタの独自実装ですはい。
ゲームとかのセーブデータをスキーマレスに読み書きしたいなという欲求があるからして。

    class VarTest
    {
        public static void TestVar()
        {
            Var v = new VarList {
                true,
                false,
                12345,
                "ほげ",
                new byte[]{0x1, 0x2, 3, 4, 5, },
                new VarDictionary() { 
                    {"あ", true}, 
                    {"い", false}, 
                    {"X", Var.Null}, 
                    {"Y", 123},
                    {"辞書", new VarDictionary() { 
                        {"あ", true}, {"い", false}, {"X", new Var()}, {"Y", 123}, 
                    } },
                    {"辞書内配列", new VarDictionary() { 
                        {"あ", new int[]{123,456 } }, 
                        {"い", new bool[]{true, true, false, false, true} }, 
                        {"X", new VarList { Var.Null, "えー", new byte[]{99, 99, 99}, } },
                        {"Y", new string[]{"う゛ぁ", "う゛ぃ",} },
                    } }
                },
                "にゃー",
            };

            int a = v[5]["辞書内配列"]["あ"][1]; // → 456
            string b = v[5]["辞書内配列"]["X"][1]; // → "えー"
            Console.WriteLine(a);
            Console.WriteLine(b);
            string serialized = v.ToFormattedString(); // JSON形式の文字列になる
            Console.WriteLine(serialized);
            Var readed = Var.FromFormattedString(serialized); // JSON形式の文字列から読み込む
            Console.WriteLine(readed.ToFormattedString()); // ちゃんと読み込めたか?
        }
    }

のような。
読み込み時に備えて、Nullとは別にundefindも定義しておくべきだったかしら。

続きを読む