JSON 文字列を C# オブジェクトに変換する

Fil Zjazel Romaeus Villegas 2023年10月12日
  1. Newtonsoft.Json を使用して JSON 文字列を C# オブジェクトに変換する
  2. JavaScript Serializer を使用して JSON 文字列を C# オブジェクトに変換する
  3. JSON 文字列を C# オブジェクトコード例に変換する
JSON 文字列を C# オブジェクトに変換する

このチュートリアルでは、2つの異なる方法を使用して JSON 文字列を C# オブジェクトに変換する方法を示します。

1つ目は Newtonsoft.Json ライブラリを使用し、2つ目は JavaScriptSerializer を使用します。どちらの方法も似ていますが、構文が少し異なり、異なる参照が必要です。

Newtonsoft.Json を使用して JSON 文字列を C# オブジェクトに変換する

Newtonsoft.Json ライブラリは、.NET で一般的に使用される JSON フレームワークです。このライブラリは、パッケージをソリューションにインストールした後に利用できます。以下のコマンドで.NETCLI を使用して、パッケージをインストールできます。

> dotnet add package Newtonsoft.Json --version 13.0.1

JSON 文字列は、オブジェクトタイプに対して有効な JSON 文字列である限り、任意のタイプの C# オブジェクトに変換できます。これは、文字列を逆シリアル化し、指定されたタイプ(T)にキャストし、入力 JSON 文字列を提供することによって行われます。

JsonConvert.DeserializeObject<T>(json_string);

JavaScript Serializer を使用して JSON 文字列を C# オブジェクトに変換する

JSON 文字列を C# オブジェクトに変換する古いオプションは JavaScriptSerializer です。Newtonsoft.Json ソリューションほど高速ではありませんが、それでも十分に利用できます。この方法を使用するには、プロジェクトに System.Web.Extensions.dll への参照を追加する必要があります。

参照を追加するには、以下の手順に従います。

  • ソリューションエクスプローラーに移動します
  • 参照を右クリックします
  • Add Reference をクリックします
  • 左側の Assemblies タブをクリックします
  • System.Web.Extensions.dll ファイルを見つけて、OK をクリックします。

JavaScriptSerializer は、JSON 文字列と型を逆シリアル化するだけでよいという点で Newtonsoft.Json メソッドと同様に機能します。

JavaScriptSerializer().Deserialize<T>(json_string)

JSON 文字列を C# オブジェクトコード例に変換する

以下のコード例は、JsonConvert.DeserializeObject<T> 関数と JavaScriptSerializer 関数の両方を使用して、JSON 文字列を任意のタイプの C# オブジェクトに変換する方法を示しています。この例では、文字列を整数を含むリストオブジェクト(List<Int32>)と、プログラムで指定したカスタムクラスに変換しています。

using Newtonsoft.Json;
using System.Data;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JSON_To_Object_Example {
  class Program {
    static void Main(string[] args) {
      // Declare the JSON Strings
      string list_str = "[1, 2, 3, 9, 8, 7]";
      string custom_class_str =
          "{ \"Name\":\"John Doe\",\"Age\":21,\"Birthday\":\"2000-01-01T00:00:00\"}";

      // ----- Newtonsoft Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_ns = JsonConvert.DeserializeObject<List<Int32>>(list_str);

      // Print the contents of the newly converted List object to the Console.
      Console.WriteLine("Converted List - Newtonsoft: " + String.Join(", ", list_converted_ns) +
                        "\n");

      // The same can be done for any type of C# object, including custom classes. Just change the
      // specified Type.
      Custom_Class class_converted_ns =
          JsonConvert.DeserializeObject<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - Newtonsoft:");
      PrintPropreties(class_converted_ns);

      Console.WriteLine("\n\n");

      // ----- JavaScriptSerializer Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_js = new JavaScriptSerializer().Deserialize<List<Int32>>(list_str);
      Console.WriteLine(
          "Converted List - JavaScriptSerializer: " + String.Join(", ", list_converted_js) + "\n");

      Custom_Class class_converted_js =
          new JavaScriptSerializer().Deserialize<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - JavaScriptSerializer:");
      PrintPropreties(class_converted_js);
      Console.ReadLine();
    }

    public class Custom_Class {
      // Custom Class created for the purposes of this tutorial
      public string Name { get; set; }
      public int Age { get; set; }
      public DateTime Birthday { get; set; }
    }

    public static void PrintPropreties(object obj) {
      // Uses the System.Component Model to read each property of a class and print its value
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) {
        string name = descriptor.Name;
        object value = descriptor.GetValue(obj);
        Console.WriteLine("{0}: {1}", name, value);
      }
    }
  }
}

このコードは、コンマで結合された整数リストと、変換されたカスタムクラス内のすべてのプロパティを出力します。どちらの方法でも同じ出力が生成されることがわかります。

出力:

Converted List - Newtonsoft: 1, 2, 3, 9, 8, 7

Converted Class - Newtonsoft:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am



Converted List - JavaScriptSerializer: 1, 2, 3, 9, 8, 7

Converted Class - JavaScriptSerializer:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am

関連記事 - Csharp JSON

関連記事 - Csharp Object