1. ホーム
  2. c#

JSON.netで不足するプロパティのデフォルト値

2023-08-11 22:59:06

質問

Json.netを使って、データベースにオブジェクトをシリアライズしています。

私はクラスに新しいプロパティを追加しました(データベース内のjsonで欠落している)、私はjsonで欠落しているときに新しいプロパティがデフォルト値を持つようにしたい。

DefaultValue属性を試しましたが、うまくいきません。私はjsonをデシリアライズするためにプライベートセッターとコンストラクタを使用しているので、値を持つパラメータがあるため、コンストラクタでプロパティの値を設定してもうまくいきません。

以下はその例です。

    class Cat
    {
        public Cat(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public string Name { get; private set; }

        [DefaultValue(5)]            
        public int Age { get; private set; }
    }

    static void Main(string[] args)
    {
        string json = "{\"name\":\"mmmm\"}";

        Cat cat = JsonConvert.DeserializeObject<Cat>(json);

        Console.WriteLine("{0} {1}", cat.Name, cat.Age);
    }

年齢が5歳になると思っているのですが、0歳になっています。

何かいい案はありませんか?

どのように解決するのですか?

私は答えを見つけた、ちょうど次の属性も追加する必要があります。

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]

あなたの例では

class Cat
{
    public Cat(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public string Name { get; private set; }

    [DefaultValue(5)]            
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
    public int Age { get; private set; }
}

static void Main(string[] args)
{
    string json = "{\"name\":\"mmmm\"}";

    Cat cat = JsonConvert.DeserializeObject<Cat>(json);

    Console.WriteLine("{0} {1}", cat.Name, cat.Age);
}

参照 Json.Netリファレンス