---
sidebar_position: 3
title: Fausse données
---

## Génération de fausse données

Afin de pouvoir commencer à utiliser votre site, nous allons générer des fausses données afin de simuler une connection à une API.

Pour cela, créer un nouveau fichier `fake-data.json` à la racine du répertoire `wwwroot` :

![Génération de fausse données](/img/affichage-donnees/fausse-donnees-01.png)

## Classe de représentation des données

Vos données doivent correspondre au format de sortie de votre future API.

Créer un dossier `Models` de votre projet puis créer la classe `Item.cs` :

![Classe de représentation des données](/img/affichage-donnees/fausse-donnees-02.png)

Cette classe representera la version objet de vos données.

Contenu de la classe :

```csharp title="Models/Item.cs"
public class Item
{
	public int Id { get; set; }
	public string DisplayName { get; set; }
	public string Name { get; set; }
	public int StackSize { get; set; }
	public int MaxDurability { get; set; }
	public List<string> EnchantCategories { get; set; }
	public List<string> RepairWith { get; set; }
	public DateTime CreatedDate { get; set; }
	public DateTime? UpdatedDate { get; set; }
}
```

## Comment générer des fausse données facilement

Afin de générer des données aléatoire nous pouvons utiliser le site suivant [https://json-generator.com/](https://json-generator.com/).

Le modèle utiliser pour la classe est :

```json
[
  '{{repeat(15, 30)}}',
  {
    id: '{{index(1)}}',
	displayname: '{{company()}}',
    name: function () {
      return this.displayname.toLowerCase();
    },
	stacksize: '{{integer(1, 64)}}',
	maxdurability: '{{integer(1, 125)}}',
    enchantcategories: [
      '{{repeat(0, 3)}}',
      '{{random("armor", "armor_head", "armor_chest", "weapon", "digger", "breakable", "vanishable")}}'
    ],
    repairwith: [
      '{{repeat(0, 2)}}',
      '{{random("oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks", "crimson_planks", "warped_planks")}}'
    ],
    createddate: '{{date(new Date(2014, 0, 1), new Date(), "YYYY-MM-dd")}}',
    updateddate: '{{random(date(new Date(2014, 0, 1), new Date(), "YYYY-MM-dd"), null)}}'
  }
]
```

Copier le résultat de la génération dans le fichier `fake-data.json`.

:::caution
Vos données doivent commencer par `[` et se terminer par `]`.
Exemple:

```json
[
  {
    "id": 1,
    "displayname": "Furnafix",
    "name": "furnafix",
    "stacksize": 36,
    "maxdurability": 32,
    "enchantcategories": [],
    "repairwith": [],
    "createddate": "2019-02-16",
    "updateddate": null
  },
  {
    "id": 2,
    "displayname": "Deminimum",
    "name": "deminimum",
    "stacksize": 49,
    "maxdurability": 46,
    "enchantcategories": [],
    "repairwith": [],
    "createddate": "2020-06-14",
    "updateddate": null
  },
	...
]
```

:::

## Notion : Sérialisation

La sérialisation est le processus de conversion d’un objet en flux d’octets pour stocker l’objet ou le transmettre à la mémoire, une base de données ou un fichier. 
Son principal objectif est d’enregistrer l’état d’un objet afin de pouvoir le recréer si nécessaire. Le processus inverse est appelé désérialisation.

### Fonctionnement de la sérialisation

Cette illustration montre le processus global de sérialisation :

![Fonctionnement de la sérialisation](/img/affichage-donnees/serialization-process.png)

L’objet est sérialisé en un flux qui contient les données. Le flux peut également contenir des informations sur le type de l’objet, telles que sa version, sa culture et son nom d’assembly. 
À partir de ce flux, l’objet peut être stocké dans une base de données, un fichier ou une mémoire.

### Usages de la sérialisation

La sérialisation permet au développeur d’enregistrer l’état d’un objet et de le recréer en fonction des besoins, en fournissant le stockage des objets ainsi que l’échange de données. 

Par le biais de la sérialisation, un développeur peut effectuer des actions telles que :
* Envoi de l’objet à une application distante à l’aide d’un service Web
* Passage d’un objet d’un domaine à un autre
* Passage d’un objet via un pare-feu sous forme de chaîne JSON ou XML
* Gestion des informations relatives à la sécurité ou aux utilisateurs entre les applications

### Sérialisation JSON avec C#

L'espace de noms `System.Text.Json` contient des classes pour la sérialisation et la désérialisation JavaScript Object Notation (JSON). 
JSON est une norme ouverte qui est couramment utilisée pour partager des données sur le Web.

La sérialisation JSON sérialise les propriétés publiques d’un objet dans une chaîne, un tableau d’octets ou un flux conforme à la spécification [JSON RFC 8259](https://tools.ietf.org/html/rfc8259). 

Pour contrôler la manière dont JsonSerializer sérialise ou désérialise une instance de la classe :
* Utiliser un objet `JsonSerializerOptions`
* Appliquer des attributs de l'espace de noms `System.Text.Json.Serialization` à des classes ou des propriétés
* Implémenter des convertisseurs personnalisés