【課題9-05】JSONファイルの入力
| プロジェクトタイプ | C#コンソールアプリ※ |
|---|---|
| プロジェクト名 | Prac_9_05 |
| ソリューション名 | PET9 |
| ターゲットフレームワーク | .NET 6.0 (長期的なサポート) |
| 最上位レベルのステートメントを使用しない | 使用しない(チェックオン) |
※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!
【課題9-03】で定義したクラスIntroductionInfoのインスタンスを,
JSON形式のテキストファイルから読み込むプログラムを作成せよ.
注意
後述の_にはあらかじめIntroductionInfoのカラ
(≒初期値がnull)の変数hogeが宣言されている.この変数に,
後述の入力ファイルから読み込んだIntroductionInfoのインスタンスを代入すること.
入力ファイルは以下をダウンロードして使用すること.これは_のような内容のファイルである. 同様の形式のどのような入力ファイルに対しても正しく動作するようにプログラムすること.

また,入力ファイルは作業ディレクトリの直下から読み込むこと.設定方法が分からない場合は 準備作業 - 作業ディレクトリの変更を参考にすること.
プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).
| |
Main()メソッドは長いので別に掲載している.以下のボタンをクリックしてコードをコピーし,Main()メソッドを上書きすること.
正しく実装できた場合,実行結果は_のようになる.
HI022098 : 医療花子 好きな言葉 .... 質実剛健 誕生日 .... 2003-08-30
準備作業 - 作業ディレクトリの変更
作ったプログラムの実行体は,デフォルトで以下の場所に作成される(_).
ソリューション名\プロジェクト名\bin\コンフィギュレーション名\net6.0\プロジェクト名.exe
例えばソリューションをC:\Users\ユーザー名\sources\repoにConsoleApp1(ソリューションも同名)という名前で
プロジェクトを作成した場合,デバッグモードでビルドすると実行体は以下の場所に作られる.
C:\Users\ユーザー名\sources\repo\ConsoleApp1\ConsoleApp1\bin\Debug\net6.0\ConsoleApp1.exe
プログラムをデバッグ実行する際もこのフォルダを作業ディレクトリとして実行される. ただし,このフォルダは一度ビルドしないと作成されないので,読み込むファイルの場所を 固定しておきたい場合は不便である.
そのためプログラムをデバッグ実行する際の作業ディレクトリを別の場所に設定し,読み込むファイルは その場所に配置するとよい.たとえばプロジェクトフォルダをデバッグ実行時の作業ディレクトリにする. 具体的な手順は以下となる.
- 【手順】デバッグ時の作業ディレクトリの変更
- プロジェクトを作成する(_).
- ソリューションエクスプローラー上で,プロジェクト名を右クリックして「エクスプローラーでフォルダーを開く」をクリックする(_).
- 入力ファイルはこのプロジェクトフォルダの中に置いておく(_).
- 開いたフォルダのアドレスバーをクリックして選択状態にして,プロジェクトの場所(=プロジェクトフォルダのパス)をコピーする(_).
- ソリューションエクスプローラー上で,ソリューション名を右クリックして「プロパティ」をクリックする(_).
- 「デバッグ」→「全般」→「デバッグ起動プロファイルUIを開く 」をクリックする(_).
- 「作業ディレクトリ」に,3でコピーしたパスを貼り付けて保存する(_).
これでデバッグ時の作業ディレクトリの直下に読み込むファイルが配置されるので,
_のようにファイル名のみを指定することで,
ファイルを開くことができるようになる(以下は入力ファイル名がhoge.txtである場合の例).

ヒント
- 授業資料では,JSON形式でC#のオブジェクトをファイルに書き込む/読み込む方法の例として,配列やリストを読み書きする例を紹介したが,
System.Text.Jsonライブラリでは書き込む/読み込む対象がリストになっている必要ははないので誤解しないように注意せよ.- _に
System.Text.Jsonライブラリの使用方法を再掲する. - _には
任意オブジェクトや読み込むオブジェクトの型などの表記があるが,これらのオブジェクトの方が配列やリスト(List<T>)でなければならないとはどこにも書かれていないことが分かるだろうか. - したがって
任意オブジェクトや読み込むオブジェクトの型の部分には,どのような型およびそのオブジェクトでも置くことができる. - 今回の場合は【課題9-03】で定義した
IntroductionInfoクラスなのだから,任意オブジェクトの部分にはIntroductionInfoクラスのオブジェクト(変数など),読み込むオブジェクトの型の部分にはIntroductionInfoクラスそのものを指定することができる.
- _に
// 書き出しJsonSerializer.Serialize(任意オブジェクト,オプション(省略可))// 読み込みJsonSerializer.Deserialize<読み込むオブジェクトの型>(JSON形式のテキストを含む文字列型の定数・変数・式)
Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1,参考2). ↩︎
Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎






