Valeur par défaut pour les propriétés manquantes avec JSON.net

j'utilise Json.net pour sérialiser les objets vers la base de données.

j'ai ajouté une nouvelle propriété à la classe (qui est manquante dans le json dans la base de données) et je veux que la nouvelle propriété ait une valeur par défaut lorsqu'elle est manquante dans le JSON.

j'ai essayé l'attribut DefaultValue mais ça ne marche pas. J'utilise les setters privés et le constructeur pour desérialiser le json, donc définir la valeur de la propriété dans le constructeur ne fonctionnera pas car il y a un paramètre avec le valeur.

voici un exemple:

    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);
    }

j'attends l'âge de 5 mais c'est zéro.

des suggestions?

35
demandé sur somdoron 2015-04-13 20:30:59

1 réponses

j'ai trouvé la réponse, il faut juste ajouter l'attribut suivant:

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]

dans votre exemple:

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 Référence--8-->

72
répondu somdoron 2015-11-27 08:19:11