C# で辞書を JSON 文字列に変換する

Bilal Shahid 2023年10月12日
  1. JSON 文字列の基本構造
  2. C#JsonConvert.SerializeObject() を使用して辞書を JSON に変換する
  3. C# でカスタムメイドの関数を使用して辞書を JSON に変換する
  4. C# で .NET Webapps の JavaScript シリアライザーを使用する
C# で辞書を JSON 文字列に変換する

では、C# で辞書を作成するにはどうすればよいでしょうか。C# では、最初に次のようにパッケージをインポートします。

using System.Collections.Generic;

次に、クラス内で宣言された MAIN 関数内で、Dictionary オブジェクトを宣言します。

IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();

それでは、辞書JSON に変換する方法を見てみましょう。

JSON 文字列の基本構造

JSON とは何ですか?JSON は JavaScript Object Notation の略です。

これは、値がキーにマップされる一種の構造を使用します。したがって、従業員のセットを店舗に保管する場合、たとえば、次のように進めることができます。

{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}

上記の例は少し複雑かもしれません。しかし、それを分解しましょう。

JSON を最初に定義するのは、JSON の構造を理解し、後で説明する変換がどのように行われるかをより正確に分析できるためです。

そこで、KEY である"Employees"から始めます。次に、中かっこに続いて 2 のかっこ(閉じて開いている)が表示されます。

中かっこエンクロージャはセットと呼ぶこともできます。2 の異なる従業員、JOHNKEVIN のみを定義したため、キーと値が含まれています。したがって、2つのセットのみが定義されます。

これらは、KEY EMPLOYEES の値であるより大きなセットに含まれています。したがって、EMPLOYEES タグを呼び出す傾向がある場合は、このセットを値として受け取ります。

C#JsonConvert.SerializeObject() を使用して辞書を JSON に変換する

少し前に初期化した CGPA ディクショナリにいくつかの値を追加することから始めましょう。

cgpas.Add(1, 3.4);
cgpas.Add(2, 3.13);
cgpas.Add(3, 3.01);

また、たとえば ID 2 の値を取得する場合は、次のように PRINT ステートメントを呼び出すことができます。

Console.WriteLine("The CGPA of ID 2 is: " + cgpas[2]);

ここで、ID は角括弧で囲まれ、KEY を示します。それでは、JsonConvert 呼び出しを使用して変換してみましょう。

string js = JsonConvert.SerializeObject(cgpas);

このコードを実行する前に、NewtonSoft.JSON がダウンロードされていることを確認してください。そうでない場合は、彼らの Web サイトにアクセスするか、Visual Studio で作業している場合は、Nuget Packages に移動し、NewtonSoft.JSON をインストールしてエラーを回避してください。

ここで、変換された文字列を簡単に印刷してみましょう。

Console.WriteLine("The CGPAs are: " + js);

そして、出力は次のようになります。

The CGPAs are: {"1":3.4,"2":3.13,"3":3.01}

SerializeObject 定義が見つからない場合は、System.Text.JsonJsonConverter ではなく、JsonConvert クラスから呼び出しているかどうかを確認してください。NewtonSoft.JSON のインストールも確認してください。

C# でカスタムメイドの関数を使用して辞書を JSON に変換する

辞書を取得して JSON 文字列に変換する関数を実装する別のソリューションを見てみましょう。後でニーズに合わせて変更できますが、先に進んで IDICTIONARY CGPAS に使用しましょう。

static string MyDictionaryToJson(IDictionary<int, double> dict) {
  var x = dict.Select(d => string.Format("\"{0}\": {1}", d.Key, string.Join(",", d.Value)));
  return "{" + string.Join(",", x) + "}";
}

さて、ここで何が起こっているのですか?さて、辞書をパラメータとして渡します。

DICTIONARY ではなく IDICTIONARY を使用していることがわかります。IDICTIONARYDICTIONARY を継承し、さらにいくつかの便利な拡張機能を備えているため、これを使用しました。

ただし、基本的な機能は同じです。関数内では、DICTIONARY から KEY をマッピングし、角かっこを使用して文字列内の値を表すことにより、文字列をフォーマットします。

{1} を囲む角かっこは、値を単に数値または文字列としてマップします。ただし、表現力を高めて複雑にする傾向がある場合は、{[1]} のような角かっこを追加して機能させることができます。

これにより、角かっこ内の値が出力されます。残りは、適切な形式で文字列を返します。

MAIN 関数内で、同じ呼び出しを行います。

string js = MyDictionaryToJson(cgpas);

Console.WriteLine("The CGPAs are: " + js);

出力:

The CGPAs are: {"1": 3.4,"2": 3.13,"3": 3.01}

C# で .NET Webapps の JavaScript シリアライザーを使用する

C# をコアとして使用する Web アプリケーションを使用しているとします。その場合は、LIST 構造に従ってオブジェクトを定義してから、JavaScriptSerializer() 関数を使用してオブジェクトを文字列に変換することをお勧めします。

コンパイル中の構文エラーを回避するには、以下に定義されている名前空間を使用してください。

using System.Collections.Generic;
using System.Text.Json;

次に、先に進んで CGPA リストを作成しましょう。

var cgpas = new List<int, double>();
cgpas.Add(new CGPA() { ID = 1, CGP = 3.4 });
cgpas.Add(new CGPA() { ID = 2, CGP = 3.13 });
cgpas.Add(new CGPA() { ID = 3, CGP = 3.01 });

もちろん、インスタンス化する CGPA クラスも定義する必要があります。

public class CGPA {
  public int ID { get; set; }
  public double CGP { get; set; }
}

そして、次のように文字列に変換できます。

var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(cgpas);

serializedResult を出力できます。これは、初期化された LIST からフォーマットされた文字列になります。

Web バージョンでは、コードを少し試してみる必要があるかもしれません。コンソールバージョンが機能せず、完全に互換性がない場合があります。

したがって、使用している関数、アセンブリ、およびディレクティブが、実行しているバージョンと一致していることを確認してください。

あなたはあなたの適合性に関して上記のコードを変更することができます。読んでくれてありがとう!

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - Csharp Dictionary