Dans les applications ASP.NET, il est souvent nécessaire d'extraire des données de réponse JSON complexes dans DTO (Data Transfer Object). Avec des outils comme RestSharp, obtenir des données JSON à partir d'API est relativement simple, mais créer des DTO à partir de réponses complexes reste un défi.
Supposons la réponse JSON suivante :
<code class="language-json">{ "response": { "result": { "Leads": { "row": [ { "no": "1", "FL": [ { "val": "LEADID", "content": "101" }, { "val": "Company", "content": "Test 1" } ] }, { "no": "2", "FL": [ { "val": "LEADID", "content": "102" }, { "val": "Company", "content": "Test 2" } ] } ] } }, "uri": "/crm/private/json/Leads/getRecords" } }</code>
Le but est d'extraire la liste des Leads de cette réponse JSON en tant que DTO, chaque DTO contient les attributs "LEADID" et "Company".
Visual Studio fournit une fonction pratique : "Coller JSON en tant que classe", qui peut générer automatiquement des classes C# basées sur la structure JSON.
Étapes :
Pour la réponse JSON fournie, les classes suivantes seront générées :
<code class="language-csharp">public class Rootobject { public Response response { get; set; } } public class Response { public Result result { get; set; } public string uri { get; set; } } public class Result { public Leads Leads { get; set; } } public class Leads { public Row[] row { get; set; } } public class Row { public string no { get; set; } public FL[] FL { get; set; } } public class FL { public string val { get; set; } public string content { get; set; } }</code>
Maintenant que nous avons une classe C#, nous pouvons définir notre classe LeadDto :
<code class="language-csharp">public class LeadDto { public string LeadId { get; set; } public string Company { get; set; } }</code>
Afin de remplir la liste LeadDto en fonction de la réponse JSON, vous pouvez utiliser LINQ :
<code class="language-csharp">var leads = from response in Rootobject.response.result.Leads.row select new LeadDto { LeadId = response.FL.First(fl => fl.val == "LEADID").content, Company = response.FL.First(fl => fl.val == "Company").content };</code>
Cette requête créera une liste d'objets LeadDto, chacun contenant les propriétés "LEADID" et "Company" extraites de la réponse JSON.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!