JSON 文字列を C# オブジェクトに変換する
-
Newtonsoft.Json
を使用して JSON 文字列を C# オブジェクトに変換する - JavaScript Serializer を使用して 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