Bonjour
tu utilises cette api https://www.newtonsoft.com/json/help/html/R_Project_Documentation.htm ?
Non j'utilise une api privée, pour l'utiliser il faut des informations "secrètes" qui sont directement données par l'entreprise qui s'occupe de l'api.
je ne te parles pas de l'api qui te donne le fichier json, mais de celle avec laquelle tu essayes de le déserialiser.
Si, tout en haut de ton code tu as
using Newtonsoft.json.Linq;
alors, on parle bien de la même chose.
Dans la négative, il faudra préciser quel outil de déserialisation tu utilises.
Je pars du principe qu'on parle de la même chose.
D'abord ton fichier (ou texte c'est pareil) json est incorrect.
{ "Items": [ { "Id": "Un Id", "CompanyName": "Un nom d'entreprise", "ExternalCustomerId": "Un nom d'entreprise", "CustomerProviderData": [ { "ProviderCustomerId": "Un id", "ProviderId": "12", "ProviderData": { "TenantId": "Un id", "Domain": "Un nom de domaine", "IndirectResellerId": "", "CustomerQualification": "None", "OrganizationRegistrationNumber": null, "QualificationUnderVetting": null } } ] },{ "Id": "Un Id 2", "CompanyName": "Un nom d'entreprise 2", "ExternalCustomerId": "Un nom d'entreprise", "CustomerProviderData": [ { "ProviderCustomerId": "Un id", "ProviderId": "13", "ProviderData": { "TenantId": "Un id", "Domain": "Un nom de domaine", "IndirectResellerId": "", "CustomerQualification": "None", "OrganizationRegistrationNumber": null, "QualificationUnderVetting": null } } ] } ] }
Ton code de déséralization maintenant.
J'ai donc écrit mes propres classes, enlevés la suppression inutile et la suppression interdite et ça marche.
Donc soit la suppressions des "" est responsable de ton bug, soit t'as un soucis dans tes classes.
Les classes d'abord
class UneClasse { public string Id { get; set; } public string CompanyName { get; set; } public string ExternalCustomerId { get; set; } public IList<AutreClasse> CustomerProviderData { get; set; } } class AutreClasse { public string ProviderCustomerId { get; set; } public int ProviderId { get; set; } public DerniereClasse ProviderData { get; set; } } class DerniereClasse { public string TenantId { get; set; } public string Domain { get; set; } public string IndirectResellerId { get; set; } public string CustomerQualification { get; set; } public string OrganizationRegistrationNumber { get; set; } public string QualificationUnderVetting { get; set; } }
Le code de déserialization ensuite
string finaldata = File.ReadAllText("json.txt"); JObject Clients = JObject.Parse(finaldata); JArray ListeClients = (JArray)Clients["Items"]; IList<UneClasse> company = ListeClients.ToObject<IList<UneClasse>>(); for (int i = 0; i < company.Count(); i++) { Console.WriteLine(company[i].CompanyName); }
Commence par tester sans les suppressions et si ça ne suffit pas compare tes classes avec les miennes.
PS pour tes prochains message, merci de faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ah désolé je n'avais pas vu qu'on pouvait directement implémenter du code.
Sinon par rapport à ta réponse, oui j'utilise Newtonsoft.json.Linq. Ensuite, tu me dis que je dois créer un fichier json.txt avec la réponse de mon api dedans ?
Je demande vu qu'à la base je n'ai pas de fichier de ce style (Je viens de le faire).
Mes classes étaient bonnes mais c'est vrai j'aurai dû les montrer, excuse moi.
Par contre quant aux lignes 12 et 28 (TenantId) c'est la réponse qui est comme ça. Il n'y a pas les guillemets à la base.
Pour le "[" et "}" manquants c'est moi qui ai fait l'erreur j'ai oublié de refermer "Items" et le texte json.
En faisant ce que tu m'as dis, ça ne marche pas mais j'imagine que c'est parce qu'il manque des guillemets aux différents "TenantId" ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPour x raisons je ne peux pas modifier mon message, je voulais dire aux différentes valeurs des "ProviderId" et non "TenantId"
J'ai mis le texte dans un fichier par soucis de simplicité pour mon test.
Si tes classes sont bonnes, et que tu as retiré les suppressions de ton code, alors oui le problème vient probablement des guillemets de cet attribut.
Du coup mets une vraie réponse dans un fichier.
Ajoute les guillemets et lit le avec ton code.
Si ça marche, ça validera que le problème est là.
Ensuite, une regex pourrait qui chercherait des attributs sans guillemets pour les remettre peut être une solution.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Effectivement ça marche, il faut mtn que je rajoute avec regex les guillemets.
Merci pour ton aide, tu m'as bien aidé.
Bonne journée
De rien, pense à marquer le sujet résolu
Quand j'étais petit, la mer Morte n'était que malade.
George Burns