C# で辞書を JSON 文字列に変換する
- JSON 文字列の基本構造
-
C#
でJsonConvert.SerializeObject()
を使用して辞書を JSON に変換する -
C#
でカスタムメイドの関数を使用して辞書を JSON に変換する -
C# で
.NET
Webapps の JavaScript シリアライザーを使用する
では、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
の異なる従業員、JOHN
と KEVIN
のみを定義したため、キーと値が含まれています。したがって、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.Json
の JsonConverter
ではなく、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
を使用していることがわかります。IDICTIONARY
は DICTIONARY
を継承し、さらにいくつかの便利な拡張機能を備えているため、これを使用しました。
ただし、基本的な機能は同じです。関数内では、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 バージョンでは、コードを少し試してみる必要があるかもしれません。コンソールバージョンが機能せず、完全に互換性がない場合があります。
したがって、使用している関数、アセンブリ、およびディレクティブが、実行しているバージョンと一致していることを確認してください。
あなたはあなたの適合性に関して上記のコードを変更することができます。読んでくれてありがとう!
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