---
# System prepended metadata

title: exercice
tags: [Dev mobile - flutter]

---

---
title: exercice 
tags: Dev mobile - flutter
---

# Qu'est-ce que la serialisation de données, a quoi cela sert ? 

> Ex: transformer une réponse JSON en objet Dart.


---

## La sérialisation c'est quoi❓

++**Définitions**++

> [color=#3de2bf] **La sérialisation** c'est un processus visant à encoder l'état d'une information qui est en mémoire sous la forme d'une suite d'informations plus petites le plus souvent des octets voire des bits.

++**Définitions plus détaillée**++

> [color=#dba125] **La sérialisation** est un besoin fréquent depuis l’avènement d’internet. Une appplication web est souvent un assemblage de services indépendant qui s’échangent des informations complexes. Un service doit transmettre des données à un autre. L’opération est simple lorsqu’il s’agit de transmettre un nombre réel, un entier, une chaîne de caractère. C’est déjà un peu plus compliqué lorsque les données à transmettre sont constituées de listes et de dictionnaires. Elle est complexe lorsque ce sont des instances de classes définies par le programme lui-même. Or les services s’échangent uniquement des octets (ou byte en anglais). Il faut donc convertir des informations complexes en une séquence d’octets puis effectuer la conversion inverse. Ces opérations sont regroupées sous le terme de sérialisation.

---
## Comment ça fonctionne ❓

La sérialisation passe par une étape intermédiaire qui revient à convertir tout type de variables en une séquence de listes et de dictionnaires puis à la convertir sous la forme d’une séquence d’octets.

![schéma](https://i.imgur.com/9uXKJ4x.png)

Le format XML intervient lors de la seconde étape. Il est assez verbeux. La séquence d’octets ou plutôt de caractères qu’il produit est assez longue même une fois les espaces enlevés. On lui préfère le format JSON qui est très utilisé pour communiquer entre les services via des API REST car il est à la fois concis et lisible.

---
## La sérialisation de donnée 🔢 dite *portability*
Les outils de sérialisation qui permettent cet échange de données sont appelés *portability*.

La sérialisation portability n'est pas un processus simple parce que :
- Différentes architectures de processeur (big-endian, little-endian) conduisent à une représentation binaire différente des nombres et d'autres objets, ce qui peut entraver la portabilité.
- Les objets accessibles par référence doivent être correctement restaurés en termes d'héritage et d'héritage multibases.
- Le support des variantes (unions en C), où le même tampon mémoire est utilisé pour stocker différents objets.
- La structure complexe, où un seul objet pourrait être référencé plusieurs fois par divers pointeurs et références, doit être restaurée correctement.
- Diverses collections d'objets doivent être prises en charge, y compris les listes et les dictionnaires.

la portability est utilisée dans au moins deux contextes :
- Portabilité entre les machines avec une architecture différente, mais à l'intérieur du même langage ou cadre 
- Portabilité entre différents langages et cadres, qui est confrontée à divers problèmes et doit souvent introduire diverses contraintes pour d'éventuelles structures sérialisables


## Sérialisation manuelle de JSON à l'aide de dart:convert 🖥

La sérialisation JSON de base dans Flutter est très simple. Flutter dispose d'une bibliothèque dart:convert intégrée qui comprend un encodeur et un décodeur JSON simple.

L'exemple JSON suivant implémente un modèle utilisateur simple.

```json
content_copy
{
  "nom" : "John Smith",
  "email" : "john@example.com"
}
```

Avec dart:convert, vous pouvez sérialiser ce modèle JSON de deux manières.

### Sérialisation de JSON en ligne

```typescript
Map<String, dynamic> user = jsonDecode(jsonString) ;print('Howdy, ${user['name']}!') ;print('Nous avons envoyé le lien de vérification à ${user['email']}.') ;
```

### Sérialisation de JSON à l'intérieur des classes de modèles

```java
classe Utilisateur {
  nom final de la chaîne ;
  e-mail final de la chaîne ;

  Utilisateur(this.name, this.email) ;

  User.fromJson(Map<String, dynamic> json)
      : nom = json['name'],email = json['email'] ;

  Map<String, dynamic> toJson() => {
        'nom' : nom,
        'email' : email,
      } ;
}
```

---
## sources

> https://flutter.dev/docs/development/data-and-backend/json
> https://www.techno-science.net/definition/11511.html
> https://fr.wikipedia.org/wiki/Sérialisation
> https://fr.wikipedia.org/wiki/Extensible_Markup_Language
> https://www.intechopen.com/chapters/68840