在ASP.NET应用中,经常需要将复杂JSON响应数据提取为DTO(数据传输对象)。借助RestSharp等工具,从API获取JSON数据已相对简易,但从复杂响应中创建DTO仍然是一项挑战。
假设以下JSON响应:
<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>
目标是从该JSON响应中提取Leads列表作为DTO,每个DTO包含"LEADID"和"Company"属性。
Visual Studio提供了一个方便的功能:“粘贴JSON作为类”,可以根据JSON结构自动生成C#类。
步骤:
对于提供的JSON响应,将生成以下类:
<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>
现在我们有了C#类,可以定义我们的LeadDto类:
<code class="language-csharp">public class LeadDto { public string LeadId { get; set; } public string Company { get; set; } }</code>
为了根据JSON响应填充LeadDto列表,可以使用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>
此查询将创建一个LeadDto对象的列表,每个对象都包含从JSON响应中提取的"LEADID"和"Company"属性。
以上是如何在 ASP.NET 中从复杂的 JSON 响应高效创建 C# DTO?的详细内容。更多信息请关注PHP中文网其他相关文章!