Désérialiser un json contenant un array vers des attributs d'une classe structurée
Bonjour,
Je reçois un JSON qui a cette (sale) tête :
Code:
{"authenticated":true,"serverinfo":["1.0",[["1002","French"],["1001","English"]]]}
Je souhaite le désérialiser dans une classe qui a cette tête :!
Code:
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:
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...