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 応答からリードのリストを DTO として抽出することです。各 DTO には「LEADID」属性と「Company」属性が含まれます。
Visual Studio には、JSON 構造に基づいて C# クラスを自動生成できる「JSON をクラスとして貼り付け」という便利な機能があります。
手順:
提供された 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>
このクエリは、JSON 応答から抽出された「LEADID」および「Company」プロパティを含む LeadDto オブジェクトのリストを作成します。
以上がASP.NET で複雑な JSON 応答から C# DTO を効率的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。