JSON(JavaScript Object Notation)は、ウェブアプリケーションで一般的に使用される軽量なデータ交換フォーマットです。C#は、JSONデータを効率的に解析するいくつかの方法を提供しており、Web APIやその他のJSONベースのシステムとの統合を簡素化します。この記事では、3つの一般的な方法を検討し、それぞれの長所と短所を明らかにします。
目次
JsonConvert.DeserializeObject()
を使用したJSONの解析JObject.Parse()
を使用した動的なJSON解析JavaScriptSerializer().Deserialize()
の使用
JsonConvert.DeserializeObject()
を使用したJSONの解析
Newtonsoft.Json
ライブラリは、.NETで広く使用されている高性能なJSONライブラリです。効率的なJSON解析のためにJsonConvert.DeserializeObject()
メソッドを提供します。NuGetパッケージマネージャー(”Newtonsoft.Json”)を介してインストールする必要があります。
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""John Doe"",
""Age"": 30,
""City"": ""New York""
}";
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
このコードは、JSON構造と一致するPerson
クラスを定義します。JsonConvert.DeserializeObject<Person>(jsonString)
はJSONをPerson
オブジェクトに逆シリアル化し、そのプロパティに簡単にアクセスできるようにします。これは一般的に最も効率的で機能豊富なアプローチです。
JObject.Parse()
を使用した動的なJSON解析
Newtonsoft.Json
も利用するJObject.Parse()
メソッドは、動的な解析を提供します。これは、JSON構造が不明な場合や、柔軟なプロパティアクセスが必要な場合に役立ちます。
using Newtonsoft.Json.Linq;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Jane Doe"",
""Age"": 25,
""City"": ""London"",
""Address"": {
""Street"": ""123 Main St"",
""Zip"": ""10001""
}
}";
JObject jObject = JObject.Parse(jsonString);
string name = (string)jObject["Name"];
int age = (int)jObject["Age"];
string city = (string)jObject["City"];
string street = (string)jObject["Address"]["Street"];
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Age: {age}");
Console.WriteLine($"City: {city}");
Console.WriteLine($"Street: {street}");
}
}
JObject.Parse()
はJObject
を作成します。インデクサを使用してプロパティにアクセスし、ネストされたオブジェクトへのアクセスを可能にします。値を正しく取得するには、型キャストが不可欠です。
JavaScriptSerializer().Deserialize()
の使用
組み込みのJavaScriptSerializer
(System.Web.Script.Serialization
)は、より簡単な代替手段を提供します。しかし、一般的にNewtonsoft.Json
よりも効率が悪く、機能も少ないです。完全性のために含まれていますが、本番アプリケーションでは避けるべきです。
using System.Web.Script.Serialization;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Peter Jones"",
""Age"": 40,
""City"": ""Paris""
}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
Person person = serializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
これはJavaScriptSerializer.Deserialize<Person>()
を使用します。プロジェクトによっては、System.Web.Extensions
への参照を追加する必要がある場合があります。
要約すると、そのパフォーマンスと機能のために、Newtonsoft.Json
のJsonConvert.DeserializeObject()
が推奨されます。JObject.Parse()
は柔軟性を提供し、JavaScriptSerializer()
は基本的な代替手段を提供します。ニーズに最適な方法を選択してください。本番コードでは、潜在的な例外(JsonReaderException
など)を常に処理してください。