[ODC]Record/ListをJSONSerializeして結果を観察する

ODCで、CSVUtilのExportRecordList2CSV Actionのように、任意のListをCSVに変換したい。
JSONSerializeしたJSONをCSVに変換する方法の検討の一環として、JSONSerializeの出力構造を確認してみた。

同じ問題について、CLient Action内のJavaScript要素内でできないかと思って、調査してみた（[JavaScript要素にObject型として渡した値の詳細を確認する (主に基本データ型)](https://qiita.com/jyunji_watanabe/items/9fd2f1c9018a56395ce9)）が、筋がよくなさそうなので方向転換。

# 確認方法
Structure/Entity/Record/List型の変数を用意する。
変数をJSONSerializeし、変数の型と、Serializeした結果のJSONを比較してみる。

JSONSerializeのSerialize Default Values=Yesに設定しておく（そうしないと、Default Valueを設定しておくと項目が出力されなくなるので）。

# 確認結果
結果は以下の表にまとめた。JSONSerializeする場所がClient ActionのときとServer Actionのときで違いが見られなかったので、表にはClient/Serverの区別は載せていない。

データ構造列：変数の型を展開したものをスクリーンショット
結果（eval）：JSONSerializeした結果のJSONを、JavaScriptオブジェクトに変換して、その構造をスクリーンショット（ブラウザの開発者ツールを開き、コンソールタブでevalにJSONに渡す）

| データの種類 | データ構造 | 結果（eval） |
|:-|:-:|:-:|
| Record  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/40e423c8-3e40-eff5-607b-7d983543b657.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/1461ca72-0ced-d243-0072-73a8f44fe945.png) |
| Structure：シンプル  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/bb5932e0-51c5-9a60-7a3f-0a27e93f2aaf.png)  |  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/dc052fbe-7569-a5e0-4b48-544846dbbeb8.png) |
| Structure：子Structure有  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/5a3f9bb7-9396-5229-0c71-d6bea723a3cb.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/6fc39e08-b001-af19-5cf1-7f06beadc68e.png)  |
| Structure：External Logicに定義  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/8b543991-afca-ce35-2410-1a6dd25ca419.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/6543e428-060b-dfbc-3800-39a8dd8a7184.png)  |
| Structure：Listを要素に持つ  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/090f5cbd-d1ff-d9c5-39fe-331b06bd50b1.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/9079882e-0e88-5447-2dfe-9211276fb4ee.png)  |
| Structure：リスト  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/300a26ba-b5c8-38fe-518c-316a337f18e9.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/b0b52bbc-fa4a-b827-7be5-86eb99046187.png)  |
| Entity：単独・１レコード  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/b911d257-a28e-5d9f-25b9-3d72aa7e3900.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/0bd2a116-5399-a43d-1c89-c5b040a359f4.png)  |
| Entity：単独・リスト  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/73953688-0be3-4720-c6e4-1d75a65c5590.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/c49eb6b0-3047-03c9-d8e1-861514e94640.png)  |
| Entity：ジョイン・１レコード  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/352c93e3-0931-c8e0-d9db-40dd189a55d1.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/a3621921-2c13-9b2b-5f2a-6fffdd9917aa.png)  |
| Entity：ジョイン・リスト  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/3fc580af-d83a-dc00-dbfc-c267e4a65759.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/1345ec79-a7b4-09a1-e939-fb97159ea524.png)  |
| Entity：ジョイン＋計算列追加・１レコード  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/13f3be77-30d6-8469-ca03-8ac2d7cacb99.png)  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/c2486959-8aa7-fbeb-801d-2a50666853da.png)  |
| Entity：ジョイン＋計算列追・リスト  | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/88d4e1f7-3298-dbb0-5ab4-7edc04fce5dc.png)  |  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/4d179d12-c850-a795-9446-a9c51990c85b.png) |

# 確認結果まとめ
JSONSerializeした結果は、想定通り（変数の型地そのまま）なのであまりコメントすることがないが

- Entity/Structure/Record1つに対応する部分は、それぞれのAttribute名がそのままJavaScriptオブジェクトのプロパティ名になる
- 渡した変数の子要素が別のEntity/Structureを持っている場合は、子要素名がそのままJavaScriptのプロパティ名にマッピングされる（例：「Entity：ジョイン・１レコード」の場合、Aggregateガ子要素としてとしてSample_Office EntityとSample_OfficeReviews Entityがあるが、これがJSON上では同名の親オブジェクトにマッピングされる）
- Listは配列にマッピングされる