プログラミング演習Ⅲ(2023)

【課題9-05】JSONファイルの入力

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_9_05
ソリューション名PET9
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

【課題9-03】で定義したクラスIntroductionInfoのインスタンスを, JSON形式のテキストファイルから読み込むプログラムを作成せよ.

注意
  • この設問を解くには先に以下の課題を完了する必要がある.
  • 後述の空欄は前提課題の回答と 全く同じ にすること(変えてはならない).
  • この設問ではコンソール(黒画面)への表示処理を作る必要はない.

後述の_にはあらかじめIntroductionInfoのカラ (≒初期値がnull)の変数hogeが宣言されている.この変数に, 後述の入力ファイルから読み込んだIntroductionInfoのインスタンスを代入すること.

入力ファイルは以下をダウンロードして使用すること.これは_のような内容のファイルである. 同様の形式のどのような入力ファイルに対しても正しく動作するようにプログラムすること

input.json

入力ファイルの内容

また,入力ファイルは作業ディレクトリの直下から読み込むこと.設定方法が分からない場合は 準備作業 - 作業ディレクトリの変更を参考にすること.

プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).

テンプレートコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Text.Json;

namespace Prac_9_05
{
    /********************************/
    /*                              */
    /*            空欄1             */
    /* IntroductionInfoクラスの定義 */
    /*     (【課題9-03】と同じ)     */
    /*                              */
    /********************************/

    internal class Program
    {
        static void Main(string[] args)
        {

            // 長いので省略

        }// end of Main()
    }// end of class Program
}// end of namespace

Main()メソッドは長いので別に掲載している.以下のボタンをクリックしてコードをコピーし,Main()メソッドを上書きすること.

正しく実装できた場合,実行結果は_のようになる.

HI022098 : 医療花子
好きな言葉 .... 質実剛健
誕生日 .... 2003-08-30
実行結果

準備作業 - 作業ディレクトリの変更

表示するにはここをクリック

作ったプログラムの実行体は,デフォルトで以下の場所に作成される(_).

ソリューション名\プロジェクト名\bin\コンフィギュレーション名\net6.0\プロジェクト名.exe

例えばソリューションをC:\Users\ユーザー名\sources\repoConsoleApp1(ソリューションも同名)という名前で プロジェクトを作成した場合,デバッグモードでビルドすると実行体は以下の場所に作られる.

C:\Users\ユーザー名\sources\repo\ConsoleApp1\ConsoleApp1\bin\Debug\net6.0\ConsoleApp1.exe
VisualStudioのフォルダ構造

プログラムをデバッグ実行する際もこのフォルダを作業ディレクトリとして実行される. ただし,このフォルダは一度ビルドしないと作成されないので,読み込むファイルの場所を 固定しておきたい場合は不便である.

そのためプログラムをデバッグ実行する際の作業ディレクトリを別の場所に設定し,読み込むファイルは その場所に配置するとよい.たとえばプロジェクトフォルダをデバッグ実行時の作業ディレクトリにする. 具体的な手順は以下となる.

  • 【手順】デバッグ時の作業ディレクトリの変更
    1. プロジェクトを作成する(_).
    2. ソリューションエクスプローラー上で,プロジェクト名を右クリックして「エクスプローラーでフォルダーを開く」をクリックする(_).
      • 入力ファイルはこのプロジェクトフォルダの中に置いておく(_).
    3. 開いたフォルダのアドレスバーをクリックして選択状態にして,プロジェクトの場所(=プロジェクトフォルダのパス)をコピーする(_).
    4. ソリューションエクスプローラー上で,ソリューション名を右クリックして「プロパティ」をクリックする(_).
    5. 「デバッグ」→「全般」→「デバッグ起動プロファイルUIを開く 」をクリックする(_).
    6. 「作業ディレクトリ」に,3でコピーしたパスを貼り付けて保存する(_).
デバッグ時の作業ディレクトリの変更

具体的な作業手順が分からなければ_を参考にすること1,2

デバッグ時の作業ディレクトリの変更(動画)

これでデバッグ時の作業ディレクトリの直下に読み込むファイルが配置されるので, _のようにファイル名のみを指定することで, ファイルを開くことができるようになる(以下は入力ファイル名がhoge.txtである場合の例).

ファイルからの読み込み処理
表示するにはここをクリック : 閉じる

ヒント

補足:System.Text.Jsonを用いて単一のオブジェクトをファイルに書き込む/読み込む方法
  • 授業資料では,JSON形式でC#のオブジェクトをファイルに書き込む/読み込む方法の例として,配列やリストを読み書きする例を紹介したが,System.Text.Jsonライブラリでは書き込む/読み込む対象がリストになっている必要ははないので誤解しないように注意せよ.
    • _System.Text.Jsonライブラリの使用方法を再掲する.
    • _には任意オブジェクト読み込むオブジェクトの型などの表記があるが,これらのオブジェクトの方が配列やリスト(List<T>)でなければならないとはどこにも書かれていないことが分かるだろうか.
    • したがって任意オブジェクト読み込むオブジェクトの型の部分には,どのような型およびそのオブジェクトでも置くことができる.
    • 今回の場合は【課題9-03】で定義したIntroductionInfoクラスなのだから,任意オブジェクトの部分にはIntroductionInfoクラスのオブジェクト(変数など),読み込むオブジェクトの型の部分にはIntroductionInfoクラスそのものを指定することができる.
System.Text.Jsonによる任意のオブジェクトの書き出し/読み込み
// 書き出し
JsonSerializer.Serialize(任意オブジェクト, オプション(省略可))

// 読み込み
JsonSerializer.Deserialize<読み込むオブジェクトの型>(JSON形式のテキストを含む文字列型の定数・変数・式)
補足:System.Text.Jsonを用いて単一のオブジェクトをファイルに書き込む/読み込む方法 : 閉じる

  1. Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1参考2). ↩︎

  2. Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎

Last updated on 2023-12-11
Published on 2023-12-11

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.