Bonjour,

Je reçois un JSON qui a cette (sale) tête :
Code json : Sélectionner tout - Visualiser dans une fenêtre à part
{"authenticated":true,"serverinfo":["1.0",[["1002","French"],["1001","English"]]]}

Je souhaite le désérialiser dans une classe qui a cette tête :!
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class AuthenticationType
{
   [JsonPropertyName("authenticated")]
   public bool Authenticated {get;set;}
 
   [JsonPropertyName("serverinfo")]
   public ServerInfoType ServerInfo {get;set;}
}
 
public class ServerInfoType 
{
   public string Version {get;set;}
   public List<LanguageType> Languages {get;set;}
}
 
public class LanguageType
{
   public string Code{get;set;}
   public string Name {get;set;}
}

On voir que pour le "serverinfo" dans le JSON, Version et Languages[] ne sont pas déclarés en tant que tel, ce sont simplement des lignes d'un object[]
Idem pour "language", on n'a qu'un string[] sans les noms d'attributs.

Est-ce qu'il existe un moyen, si possible avec System.Text.Json de mettre des décorateurs du type :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public class ServerInfoType 
{
   [JsonArrayIndex(0)]
   public string Version {get;set;}
 
   [JsonArrayIndex(1)]
   public List<LanguageType> Languages {get;set;}
}
 
public class LanguageType
{
   [JsonArrayIndex(0)]
   public string Code{get;set;}
 
   [JsonArrayIndex(1)]
   public string Name {get;set;}
}

Je trouve qu'on peut créer un JsonConverter mais déjà j'arrive pas à le faire marcher, mais surtout, visiblement il en faudra un par type. J'ai plus d'une trentaine de types de la sorte à gérer, j'aimerais éviter de m'amuser à écrire plus de code pour la désarialisation que pour l'ensemble du reste du programme...