読者です 読者をやめる 読者になる 読者になる

Json.NET - JSON から取得した値でインスタンスのプロパティを上書き

Json.NET で、「デフォルト値が設定してあるインスタンスのプロパティを、JSON から取得した値で上書きする」方法についてです。 結論を先に書くと JsonConvert.PopulateObject メソッドを使います。

したいことも含めて、コードを見てもらった方が早いと思うので、さっそくコードを。

まずはクラス。

class Settings {
    public string FontName { get; set; }
    public int FontSize { get; set; }
    public bool LineNumbers { get; set; }
}

で、JSON から取得した値で、インスタンスのプロパティを上書きしてみます。

// デフォルト値が設定してある
var settings = new Settings {
    FontName = "Consolas",
    FontSize = 10,
    LineNumbers = true,
};

// FontSize と LineNumbers が指定してある JSON を使って
var json = @"{ 'FontSize': 12, 'LineNumbers': false }";

// FontSize と LineNumbers だけを上書きする
JsonConvert.PopulateObject(json, settings);

// よし
Console.WriteLine(settings.FontName);   // Consolas
Console.WriteLine(settings.FontSize);   // 12
Console.WriteLine(settings.LineNumbers);    // false

JSON に含まれていないプロパティは変更されず、JSON に含まれているプロパティだけが上書きされていますね。

DeserializeObject メソッドのサンプルは割と見かけますが、PopulateObject メソッドのサンプルはあまり見かけなかったので、ちょっと書いてみました。