最近、突如C#の開発を依頼されたので事前学習の一部です。
どこかの友に届け。
ということでこの記事では、C#のLINQとSystem.Text.Jsonを組み合わせて、
データの操作とシリアライズ・デシリアライズの基本的な方法を記載。
LINQはコレクションやデータベースに対する操作を簡潔に行うためのツールで、
System.Text.JsonはJSONデータを効率的に扱うためのライブラリです。
これを応用すればある程度、LINQやJSON周りはそこそこイケると考えている。。。
開発環境
- IDE: Visual Studio 2022
- .NET Version: .NET 6.0(多分、.NET8.0でも行けると思います)
目次
1. LINQを使ったコレクションの基本操作
2. System.Text.JsonでのJSON操作
3. LINQとSystem.Text.Jsonの組み合わせ
1. LINQを使ったコレクションの基本操作
LINQを使用すると、コレクションに対するフィルタリング、並び替え、集計などが簡単にできます。ここでは基本的な使い方を紹介します。
C#のORMみたいなもの?
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
var users = new List<User>
{
new User { Id = 1, Name = "Alice", Age = 30 },
new User { Id = 2, Name = "Bob", Age = 25 },
new User { Id = 3, Name = "Charlie", Age = 35 }
};
// 30歳以上のユーザーをフィルタリング
var filteredUsers = users.Where(u => u.Age >= 30);
Console.WriteLine("30歳以上のユーザー:");
foreach (var user in filteredUsers)
{
Console.WriteLine($"{user.Name}, {user.Age}歳");
}
// 名前の昇順でソート
var sortedUsers = users.OrderBy(u => u.Name);
Console.WriteLine("\n名前の昇順:");
foreach (var user in sortedUsers)
{
Console.WriteLine($"{user.Name}");
}
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
実行結果
解説:
Whereメソッドでフィルタリングし、特定の条件を満たす要素だけを取得します。
OrderByメソッドで、指定したプロパティに基づいて要素を並び替えます。
2. System.Text.JsonでのJSON操作
System.Text.Jsonは、オブジェクトをJSON形式に変換(シリアライズ)したり、JSONからオブジェクトに変換(デシリアライズ)するのに使用します。
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
class Program
{
static void Main()
{
var user = new User { Id = 1, Name = "Alice", Age = 30 };
// オブジェクトをJSON文字列に変換(シリアライズ)
string jsonString = JsonSerializer.Serialize(user);
Console.WriteLine("シリアライズ結果:");
Console.WriteLine(jsonString);
// JSON文字列をオブジェクトに変換(デシリアライズ)
var deserializedUser = JsonSerializer.Deserialize<User>(jsonString);
Console.WriteLine("\nデシリアライズ結果:");
Console.WriteLine($"{deserializedUser.Name}, {deserializedUser.Age}歳");
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
実行結果
解説:
JsonSerializer.Serializeを使ってオブジェクトをJSON文字列に変換。
JsonSerializer.Deserializeを使ってJSON文字列をオブジェクトに変換します。
3. LINQとSystem.Text.Jsonの組み合わせ
LINQとSystem.Text.Jsonを組み合わせて、JSONデータのフィルタリングや変換が簡単に行えます。
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.Json;
class Program
{
static void Main()
{
string jsonString = @"[
{ ""Id"": 1, ""Name"": ""Alice"", ""Age"": 30 },
{ ""Id"": 2, ""Name"": ""Bob"", ""Age"": 25 },
{ ""Id"": 3, ""Name"": ""Charlie"", ""Age"": 35 }
]";
// JSON文字列をリストにデシリアライズ
var users = JsonSerializer.Deserialize<List<User>>(jsonString);
// LINQで30歳以上のユーザーをフィルタリング
var filteredUsers = users.Where(u => u.Age >= 30);
Console.WriteLine("30歳以上のユーザー:");
foreach (var user in filteredUsers)
{
Console.WriteLine($"{user.Name}, {user.Age}歳");
}
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
実行結果
解説:
JSON文字列をデシリアライズして、LINQでフィルタリング操作を行います。
この記事では、LINQとSystem.Text.Jsonを使った基本的なデータ操作とJSON操作について紹介しました。これらを活用することで、データ処理が効率的かつ簡潔に行えます。ぜひ実際に試してみてください。
プログラムが動くまで
C#に触れてなかったり、VisualStudioを触ったことない方は下記の手順ですぐ実行できると思いますので
お試しあれ。
動作確認手順
-
Visual Studioで新しいコンソールアプリケーションプロジェクトを作成
-
Visual Studioを開き、「新しいプロジェクトの作成」を選択します。
-
「コンソールアプリ (.NET Core)」を選択し、「次へ」をクリックします。
-
プロジェクト名を入力し、保存場所を指定したら「作成」をクリックします。
-
必要なパッケージのインストール
※System.Text.Jsonは.NET 6.0に含まれているため、追加でインストールする必要はありません。
ただし、必要に応じて他の外部パッケージ(例: Newtonsoft.Jsonなど)をインストールする場合は、
NuGet パッケージ マネージャーで行います。
Visual Studioで
「ツール」 > 「NuGet パッケージ マネージャー」 > 「ソリューションの NuGet パッケージの管理」を選択。
「参照」タブで検索してインストールします。
プロジェクト内のProgram.csファイルを開き、事前に作成したコードをそのままコピーして貼り付け。
そしてプログラムの実行
1. LINQの基本操作
コードをコピーし、Program.csに貼り付けます。
Visual Studioの上部にある「▶」ボタン(デバッグ実行)をクリックしてプログラムを実行します。
コンソールに実行結果と同じ出力が表示されるはずです。
2. JSON操作
次に、JSONシリアライズとデシリアライズのコードに切り替えます。
Userクラスは共通で使用できるので、プログラムの上部に残しておきます。
新しいコードをコピーし、Mainメソッドの内容を置き換えて再度実行します。
こちらもコンソールに実行結果と同じ出力が表示されるはずです。
3. LINQとSystem.Text.Jsonの組み合わせ
最後に、LINQとSystem.Text.Jsonを組み合わせたコードを貼り付けます。
Mainメソッドの内容を再度置き換えて、実行します。
こちらもコンソールに実行結果と同じ出力が表示されるはずです。
注意事項
各コードを試すとき、
Mainメソッド内の内容を必要に応じてコメントアウトするか、
新しいプロジェクトを作成することで分けて実行すると簡単。
JSONデータやコレクションの内容が正しく構造化されているか
試して確認してみてください。