C# で JSON をファイルに書き込む
この投稿では、C# プログラミング言語を使用して基本的な JSON オブジェクトを作成し、それらをファイルに書き込む方法を学びます。 まず、JSON とは何かをしっかりと理解しておく必要があります。
JSON 形式
JSON は JavaScript Object Notation の略で、最小限のデータを交換するための標準です。 JavaScript プログラミング言語の一部を基盤として使用します。
JSON は完全に言語にとらわれない構造であり、特殊文字は使用しません。 人間が JSON を読み書きするのは簡単で、コンピュータが JSON データを生成して解釈するのは簡単です。
XML に代わるものであり、最も基本的なデータ型の組み込みサポートを提供します。 JavaScript Object Notation という用語は、JavaScript と JSON の両方で使用される構文を指します。
テキストベースの言語であるため、ユーザーにとっては読みやすく、同時に機械が解釈するのも簡単です。 数年前まで、プログラマーは XML に依存して、Web サービスなどのさまざまなサービス アプリケーション間の通信を容易にしていました。
しかし、Web API の人気が高まるにつれて、ユーザーは JSON を代替データ シリアライゼーション標準の候補として調査し始めました。
Json.NET
をダウンロードしてインストールする
データを JSON 形式でシリアル化するには、.NET Framework によって提供されるネイティブ クラスを使用するか、他のサードパーティ コンポーネントを使用します。 このチュートリアルでは、NewtonSoft
シリアライゼーション ライブラリを使用して JSON 構造をシリアライズします。
-
開始するには、Microsoft Visual Studio ワークプレースを準備し、
Newtonsoft
パッケージをインストールする必要があります。 -
Microsoft Visual Studio を起動し、メニュー バーから
File
を選択し、次にNew
とProject
オプションを選択します。 -
左側から
Visual C#
を選択し、Console App (.NET Framework)
をクリックします。 適切な名前を付けて、プロジェクトを見つけます。writejsonByZeeshan
と名付けました。 名前を付けたら、OK
をクリックします。 -
プロジェクトが作成されたので、
Json.NET
への参照を含めます。 これを行うには、Solution Explorer
領域を右クリックし、Manage NuGet Packages for Solution
を選択します。 -
Newtonsoft.Json
を選択した後、右側のパネルからInstall
を選択します。 -
ダウンロードが完了すると、コンポーネントがインストールされ、
Json.NET
に緑色のチェックマークが表示されます。 -
Solution Explorer
の参照に移動すると、Newtonsoft.json
の参照が追加されていることがわかります。Newtonsoft.json
を追加したら、JSON を作成するコードを作成します。
Json.NET
を使用して JSON をファイルに書き込む
Newtonsoft
への参照は、ソリューションが最初に開発されたときに以前にソリューションに含まれていました。 ここで、JSON をシリアル化して生成する最初のコードの作業を開始します。
基本的な JSON 構造から始めましょう。次に、コードを 1 行ずつ実行し、その機能をより深く分析しながら、より複雑な構造に向かって徐々に進んでいきましょう。 まず、プロジェクトに新しいクラスを追加して、構造を JSON ファイルに入れることから始めましょう。
-
まず、
Main()
に次のライブラリを追加します。using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;
-
クラスを追加するには、
Solution Explorer
パネルを右クリックし、Add
を左クリックして、ドロップダウン メニューからクラスを選択します。Student
クラスに名前を付けたように、適切な名前を付けた後、最後のステップはAdd
ボタンをクリックすることです。 -
変数オブジェクトを正常に作成したら、新しいクラスで変数オブジェクトの定義を開始しましょう。
Student
クラスにName
、Rollnum
、Grade
、およびCity
を含め、次の値を割り当てました。class Student { public string Name = "Muhammad Zeeshan"; public int Rollnum = 3227; public string Grade = "A"; public string City = "Islamabad"; }
-
そこで、
Main
関数でs
という名前のStudent
クラスのインスタンスを作成します。Student s = new Student();
-
次に、
JsonConvert.SerializeObject
メソッドを使用して、先ほど指定したクラス オブジェクトを JSON 形式に変換します。 シリアル化されたデータをSerializedJsonResult
という名前の文字列変数に入れましょう。string SerializedJsonResult = JsonConvert.SerializeObject(s);
-
データが JSON 形式にシリアル化されたので、データを保存する場所を指定する必要があります。
jsonpath
という名前の文字列変数が使用されます。string jsonpath = "D:/jsondata/studentdata.json";
-
if
条件を使用して、パスが正しいかどうかを確認します。 パスが既に存在する場合、コードは新しいパスを作成して既存のパスを上書きし、古いパスを破棄します。if (File.Exists(jsonpath)) { File.Delete(jsonpath); using (var st = new StreamWriter(jsonpath, true)) { st.WriteLine(SerializedJsonResult.ToString()); st.Close(); } }
-
パスが利用できない場合、
else-if
は新しいパスを作成し、JSON をファイルに書き込みます。else if (!File.Exists(jsonpath)) { using (var st = new StreamWriter(jsonpath, true)) { st.WriteLine(SerializedJsonResult.ToString()); st.Close(); } }
完全なソース コード
コード例 (Student
クラス):
class Student {
public string Name = "Muhammad Zeeshan";
public int Rollnum = 3227;
public string Grade = "A";
public string City = "Islamabad";
}
コード例 (Main
クラス):
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace writejsonByZeeshan {
class Program {
static void Main(string[] args) {
Student s = new Student();
string SerializedJsonResult = JsonConvert.SerializeObject(s);
string jsonpath = "D:/jsondata/studentdata.json";
if (File.Exists(jsonpath)) {
File.Delete(jsonpath);
using (var st = new StreamWriter(jsonpath, true)) {
st.WriteLine(SerializedJsonResult.ToString());
st.Close();
}
}
else if (!File.Exists(jsonpath)) {
using (var st = new StreamWriter(jsonpath, true)) {
st.WriteLine(SerializedJsonResult.ToString());
st.Close();
}
}
}
}
}
出力:
{"Name":"Muhammad Zeeshan","Rollnum":3227,"Grade":"A","City":"Islamabad"}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn関連記事 - Csharp JSON
- C# 解析 JSON
- C# オブジェクトを JSON 文字列に変換する
- C# で JSON をサーバーに投稿する
- C# で JSON を逆シリアル化する
- JSON 文字列を C# オブジェクトに変換する