ProgrammationDéveloppeur Backend / Développeur VB.NET

Quels sont les moyens de réaliser la sérialisation et la désérialisation d'objets en Visual Basic .NET, quand faut-il utiliser chaque méthode et quelles sont les subtilités à considérer ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Dans VB.NET, la sérialisation des objets peut être réalisée de plusieurs manières : avec les sérialiseurs .NET standard (BinaryFormatter, XmlSerializer, DataContractSerializer, JsonSerializer).

Quand utiliser :

  • BinaryFormatter — obsolète, déconseillé par souci de sécurité.
  • XmlSerializer — pratique pour échanger des données avec des programmes externes et pour stocker des paramètres.
  • DataContractSerializer — adapté à la sérialisation d'objets complexes et aux interactions avec WCF.
  • JsonSerializer (System.Text.Json ou Newtonsoft.Json) — pour les API web modernes et l'interopérabilité entre langages.

Subtilités :

  • Les champs et propriétés publics sont sérialisés par défaut, pas les privés.
  • La classe sérialisée doit avoir un constructeur par défaut.
  • Des exceptions peuvent survenir lors de la sérialisation d'objets avec des cycles de référence ou des membres non sérialisables.

Exemple de code avec XmlSerializer :

<Serializable()> Public Class Person Public Property Name As String Public Property Age As Integer End Class Dim p As New Person With {.Name = "Ivan", .Age = 30} Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Person)) Using stream As New IO.FileStream("person.xml", IO.FileMode.Create) serializer.Serialize(stream, p) End Using

Question piège.

Peut-on sérialiser un objet qui contient des propriétés de types non marqués comme sérialisables ? Que se passe-t-il ?

Réponse : Si la classe contient des membres (propriétés/champs) dont le type n'est pas marqué comme sérialisable, la sérialisation échouera avec une erreur. Par exemple, un objet avec un champ de type FileStream ne pourra pas être sérialisé via XmlSerializer — une exception sera levée car ce type ne prend pas en charge la sérialisation.

Exemples réels d'erreurs dues à une méconnaissance des subtilités du sujet.


Histoire

Erreur de sérialisation due à un constructeur privé : Lors de la migration des données, le développeur a tenté de sérialiser une classe avec un seul constructeur privé. En conséquence, la sérialisation a échoué avec une erreur, le processus de migration a été interrompu.


Histoire

Références cycliques : Dans le projet, le XmlSerializer était utilisé pour la sérialisation, mais il y avait des références cycliques entre les objets. La sérialisation entraînait une StackOverflowException et des échecs non gérés des services.


Histoire

Perte de données accidentelle : Dans un objet complexe sérialisé via JsonSerializer, un membre était marqué [JsonIgnore] par accident, ce qui entraînait une perte de certaines données lors de l'envoi, et la désérialisation ultérieure perdait des paramètres importants de l'objet.