C# Programming

C#における高速JSONパース

Spread the love

JSON(JavaScript Object Notation)は、ウェブアプリケーションで一般的に使用される軽量なデータ交換フォーマットです。C#は、JSONデータを効率的に解析するいくつかの方法を提供しており、Web APIやその他のJSONベースのシステムとの統合を簡素化します。この記事では、3つの一般的な方法を検討し、それぞれの長所と短所を明らかにします。

目次

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()の使用

組み込みのJavaScriptSerializerSystem.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.JsonJsonConvert.DeserializeObject()が推奨されます。JObject.Parse()は柔軟性を提供し、JavaScriptSerializer()は基本的な代替手段を提供します。ニーズに最適な方法を選択してください。本番コードでは、潜在的な例外(JsonReaderExceptionなど)を常に処理してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です