C#でJSONを扱う方法について解説!C#でJSONを使いこなせるようになろう
- システム
エンジニア - JSONという技術があることを始めて聞きましたが、どのような技術なのでしょう。
- プロジェクト
マネージャー - JSONはC#でも使えるデータ交換フォーマットのことです。
C#によるJSONとは?
JSONという技術をご存じでしょうか?JSONとはJavaScript Object Notationの略ですが、JavaScript以外の言語でも使えるシンプルなデータ交換フォーマットです。
データ交換フォーマットは他にはXMLが有名ですが、JSONはXMLと違いテキストデータに特化していません。
また型・配列・nullといったXMLにない機能があるため、プログラム処理との親和性が高いです。C#はこのJSONをとても簡単に扱うことができます。
JSONの基礎その1
C#でのJSONの扱い方を解説する前に、JSONの概要について簡単に説明します。JSONは以下のような形式でデータを扱います。
{
“name”: “Ramen”, “price”: 500,
“name”: “Miso Ramen”, “price”: 600
}
以下のように値がないことを示すnullを使用できます。
{ “name”: null, “price”: null }
以下のようなtrue/falseといった真偽値も使えます。
{ “ajitama_tsuika_flag”: true }
JSONの基礎その2
以下のような配列を持つこともできます。ここまで紹介した機能はXMLにはないため、それらが必要ならJSONを使う意義があるといえます。
{
“tsuika”: [ “Negi”, “Nori”, “Ninniku” ],
}
以下のような階層構造にもできます。これに関してXMLはかなり得意です。
{
“ramen_info”: {
“men”: “Futo Men”,
“soup”: “Tonkotsu”
}
}
以上のように、JSONはシンプルでかつ豊富な機能を持っているため広く普及しています。
C#でのJSONの扱い方
それではC#でJSONを扱う方法を解説します。上記の例に記載されているラーメンの名前と価格をJSONのデータにしましょう。
なおこのページのC#サンプルを実行する場合は、ソースの先頭に、
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
を追加してください。ではまず、以下のようなクラスを作りましょう。
class Ramen
{
[JsonPropertyName(“name”)] public string Name { get; set; }
[JsonPropertyName(“price”)] public int Price { get; set; }
}
JSON形式にシリアライズする
上のC#サンプルのRamenはNameとPriceというプロパティを持つシンプルなクラスです。
属性のJsonPropertyNameは見慣れないと思いますが、これでJSONにした時のキー名を変更できます。これがないとJSONのキー名は、プロパティ名と同じ先頭が大文字のNameやPriceになってしまいます。
JsonPropertyNameで、nameやpriceのように先頭を小文字に変更できるのです。そして以下がJSONをシリアライズするC#サンプルです。
public static void Main()
{
List <Ramen> ramen = new List<Ramen>();
ramen.Add(new Ramen { Name = “Ramen”, Price = 500 });
ramen.Add(new Ramen { Name = “Miso Ramen”, Price = 600 });
string jsonStr = JsonSerializer.Serialize(ramen);
Console.WriteLine(jsonStr);
}
シリアライズはデータを実体化すること
シリアライズとは、プログラム上のデータを、文字列やテキストファイルやバイナリファイルと言った実体のある形式に変換することです。
上のC#サンプルではRamenクラスのデータをListに格納し、それをJsonSerializer.SerializeでJSON形式の文字列にしています。実行結果は以下になります。
[{“name”:”Ramen”,”price”:500},{“name”:”Miso Ramen”,”price”:600}]JSONのデータをデシリアライズする
では次はデシリアライズをしましょう。デシリアライズとはシリアライズの逆で、文字列などのデータをプログラム上のデータに変換することです。
以下を上のC#サンプルに追加してください。
List<Ramen> ramenData = JsonSerializer.Deserialize<List<Ramen>>(jsonStr);
ramenData.ForEach(ramen =>
{
Console.Write(ramen.Name + ” “);
Console.WriteLine(ramen.Price);
});
デシリアライズも簡単にできる
JSONデータの文字列を、JsonSerializer.DeserializeでRamen型を格納したList型にデシリアライズしています。そして繰り返し処理を行うForEachと=>を使ったラムダ式で、中身を表示しています。
上のC#サンプルを実行すると、
Ramen 500
Miso Ramen 600
と表示されます。なお今回はRamenというクラスを自作しましたが、匿名クラスや既存のDictionaryクラスを使っても、JSONを扱うことはできます。
ただしそれらはキー名の重複ができません。キーを使う場合は、今回のように自作クラスを作るべきでしょう。
JSONの配列を使う方法
C#でJSONの配列を使うにはどうしたらよいのでしょうか。上のC#サンプルのRamenクラスに以下のList型のフィールドを追加しましょう。
[JsonPropertyName(“tuika”)] public List<string> Tuika { get; set; }
これで以下のように配列データを扱うことができます。
List <Ramen> ramen = new List<Ramen>();
ramen.Add(new Ramen { Name = “Ramen”, Price = 500, Tuika = new List<string> { “Ajiama”, “Negi” } });
シリアライズした結果は以下になります。
[{“name”:”Ramen”,”price”:500,”tuika”:[“Ajiama”,”Negi”]}]JSONの階層構造を使う方法
C#でJSONの階層構造を使うにはどうすればよいのでしょうか。やり方は、まずここまでのサンプルに以下のクラスを追加してください。
class Ramen_Info
{
[JsonPropertyName(“men”)] public string Men { get; set; }
[JsonPropertyName(“soup”)] public string Soup { get; set; }
}
そしてRamenクラスに以下のInfoプロパティを追加します。
[JsonPropertyName(“ramen_info”)] public Ramen_Info Info { get; set; }
別のクラスを作れば階層化できる
これで以下のように階層化できるようになります。
List <Ramen> ramen = new List<Ramen>();
ramen.Add(new Ramen { Name = “Ramen”, Price = 500, Info = new Ramen_Info { Men = “Futomen”, Soup = “Tonkotsu” } });
シリアライズした結果は以下になります。ramen_infoのデータがサブ階層になっていますね。
[{“name”:”Ramen”,”price”:500,”ramen_info”:{“men”:”Futomen”,”soup”:”Tonkotsu”}}]- システム
エンジニア - JSONは思ったよりも簡単に使えそうですね。
- プロジェクト
マネージャー - JSONはシンプルでかつ豊富な機能を持っています。XMLとあわせて扱い方を理解すれば、テキストデータのやり取りはマスターしたといえます。
C#でJSONを使いこなそう
C#のJSONの扱い方を解説しましたが、ご理解頂けましたでしょうか。
思ったより簡単にできることが分かったと思います。JSONとXMLの扱い方を理解すれば、C#のテキストデータのやり取りはマスターしたといえるでしょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)