Sérialisation JSON et préservation des types dans ServiceStack
Lors de la sérialisation d'objets au format JSON, il est essentiel de conserver les informations de type afin de les désérialiser correctement. Prenons l'exemple suivant :
<code>public class Container { public Animal Animal { get; set; } } public class Animal { } public class Dog : Animal { public void Speak() { Console.WriteLine("Woof!"); } }</code>
Ici, la sérialisation d'un objet Container contenant une instance Dog entraîne une InvalidCastException lors de la désérialisation car le champ Animal désérialisé n'est pas explicitement reconnu comme un Dog. Pour résoudre ce problème, ServiceStack adopte un mécanisme pour conserver les informations de type.
Le JsonSerializer dans ServiceStack inclut un attribut __type
dans la charge utile JSON pour stocker les informations de type. Cette propriété est émise pour les types d'objets d'interface, de classe abstraite et à liaison tardive. Par exemple, si Animal est défini comme une interface ou une classe abstraite, le JSON sérialisé contiendra un attribut __type
avec la valeur "Animal" ou "Dog" respectivement.
Il convient de noter que l'utilisation de l'héritage dans les DTO n'est généralement pas recommandée car elle introduit une complexité inutile. Le processus de sérialisation JSON par défaut de ServiceStack est conçu pour produire des DTO auto-descriptifs sans avoir besoin d'informations de type externes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!