Le ShouldSerialize Pattern, un pattern à (re-)découvrir ?


Le ShouldSerialize Pattern est une fonctionnalité à utiliser dans le contexte de la sérialisation de
ドニー. Malgré tous les avantages que cette fonctionnalité offre, elle demeure méconnue.ダンスセット
記事、je vous explique comment en tyer parti et dans quel cadre l'utiliser.

Le ShouldSerialize Pattern permet de résoudre facilement des problèmes que j’ai rencontrés à de
nombreuses リプリーズ. Le gain de temps potentialiel est donc un side à ne pas negliger. Afin d’être le
さらに、具体的な可能性がある場合は、je vous を提案します.
  • J'ai un object "Personne"à sérialiser en XML. L'objet sérialisé ne doit contenir la date de décès que si elle existe et par conséquent, ne peut pas être égale à la valeur par défaut d'une DateTime (01/01/0001 00:00:00). Cet object a la definition suivante :

  • [XmlRoot("personne", Namespace = Namespace)]
    public class Personne {
         [XmlAttribute("nom")]
         public string Nom { get; set; }
    
         [XmlAttribute("prenom")]
         public string Prenom { get; set; }
    
         [XmlAttribute("age")]
         public int Age { get; set; }
    
         [XmlAttribute("dateDeNaissance", DataType = "date")]
         public DateTime DateDeNaissance { get; set; }
    
         [XmlAttribute("dateDeDeces", DataType = "date")]
         public DateTime DateDeDeces { get; set; }
    }
    

    Relativement difficile à résoudre avec une DateTime non-nullable, le pattern ShouldSerialize rend la tâche triviale.

    コメント fonctionne-t-il et comment le mettre en place ?

    n'a besoin que d'une が選択した場合: une method facultative (apparue très rapidement dans les premières versions .Net et semi cachée dans la documentation officielle, d'où le fait sans doute de sa disparition dans les bonnes pratiques de développement) liée aux propriétés et qui permet d'avertir le concepteur, Visual Studio dans mon cas, que la propriété a été modifiée par rapport à sa valeur par défaut et qu'il doit en tenir compte, ou non, lors de la sérialisation.

    Reprenons notre object, dans lequel j'implémente la method ShouldSerialize{nom de la propriété}() afin de réaliser la demande business :

    [XmlRoot("personne", Namespace = Namespace)]
    public class Personne {
         ...
    
         [XmlAttribute("dateDeDeces", DataType = "date")]
         public DateTime DateDeDeces { get; set; }
    
         public bool ShouldSerializeDateDeDeces()
         {
             return DateDeDeces != DateTime.MinValue;
         }
    }
    


    C# 7.1 の変更に加えて、一部の機能を使用している場合は、「デフォルト」の使用法を変更する必要があり、コードのメンテナンスを強化する必要があります.

    [XmlRoot("personne", Namespace = Namespace)]
    public class Personne {
         ...
    
         [XmlAttribute("dateDeDeces", DataType = "date")]
         public DateTime DateDeDeces { get; set; }
    
         public bool ShouldSerializeDateDeDeces => DateDeDeces != default;
    }
    


    Le littéral "default"permet de spécifier la valeur par défaut (merci La Palice) d'un type donné, lorsque le compilateur peut déduire le type d'expression.ダンス、デフォルト = DateTime.MinValue.

    Très important dans les deux cas, le nom de la method doit beginer par "ShouldSerialize"et être suivi du nom de la propriété visée, "DateDeDeces".

    シリアライゼーション XML セラ エクセキューテの瞬間、メソッド ShouldSerializeDateDeDeces() セラ エバリュー パー ル コンセプチュア、シ ル リターン est "true"、ラ プロプリエテ セラ インテグリー ダン l'XML リザルタント、シ ル リターン est "false"、エル ネ レ セラパス.

    Les avantages de ce pattern sont :
  • Sa facilité d'utilisation, d'écriture et de maintenance sur l'ensemble des propriétés d'un object à sérialiser, en fonction des demandes business (on sait tous que certaines demandes business peuvent être farfelues ou dépendantes de systèmes rigides et historiques) .
  • Sa compatibilité pour la plupart des Serializers (XML, JSON, ...).

  • Vous l'avez compris, si votre projet requiert de la serialisation, le ShouldSerialize Pattern doit figurer en bonne place parmi votre arsenal de fonctionnalités.結果として、gardez bien cette fonctionnalité dans un coin de votre tête ! Il existe d'autres pattern/fonctionnalités que je vous come to explorer afin de résoudre le plus efficacement possible vos problèmes liés à la sérialisation de données.

    ハッピーコーディング!