[UWP] JSONファイルをシリアライズする

前回の記事ではJSONのデシリアライズについて紹介しました。

今回はシリアライズについて見ていきます。コードは以下の通りです。

1行目でシリアライザーを作成します。このときシリアライズするデータの型をtypeof()で指定します。

続いて、MemoryStreamを作成し、5行目のWriteObjectでStreamに書き出します。買い出すのは実際にデータの入っているクラスのインスタンス(この例ではpref)です。

あとは6行目でシリアライズをします。この結果変数jsonDataにはクラスから読み取ったデータがJSON形式の文字列となって代入されます。

var serializer2 = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<Prefecture>));

using (var stream = new MemoryStream())
{
    serializer2.WriteObject(stream, pref);
    string jsonData =  System.Text.Encoding.UTF8.GetString(stream.ToArray());
}

関連記事

[UWP] JSONファイルをデシリアライズする

前回は AssetsフォルダにあるJSONファイルを読み込む方法について紹介しました。

今回は読み込んだJSON形式の文字列をデシリアライズする方法について説明します。

使用するJSONファイルの例は、前回の記事を参照してください。

はじめにデシリアライズ用のクラス(読み込んだJSON文字列のデータを格納するためのクラス)を準備します。

取り込むJSONファイルは、県名、県が持つ市の名前、県のIDです。

よって以下のような2つのクラスを作成しました。これにより1つの県に対し市町村名を複数持てるようにしています。Prefectureクラスが県と市町村を管理するクラスで、Cityクラスが市町村を管理するクラスです。

シリアライズ/デシリアライズするには、クラス名の属性として[DataContract]を、メンバーの属性には[DataMember]が必要です。

// Cityクラス
// 県が持つ市町村名とそのIDを管理するクラス。

[DataContract]
class City
{
    [DataMember]
    public string Id { get; set; }
    [DataMember]
    public string Name { get; set; }
}
// Prefectureクラス
// 県の名前(Name)とCityクラスのデータをListで管理するクラス

[DataContract]
class Prefecture
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public List<City>  Cities { get; set; }
}

さて、クラスが準備できましたので後はデシリアライズするコードを記述します。

// jsonデータからクラスへのデシリアライズ
List<Prefecture> pref;
using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
{
    // List<Prefecture>に変換できるシリアライザーを作成
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<Prefecture>));
    // クラスにデータを読み込む
    pref = serializer.ReadObject(stream) as List<Prefecture>;
}

2行目でデシリアライズ先のクラスを準備し、3行目でjson文字列をstreamに読み込みます。

6行目はシリアライザーの作成処理です。この処理には、DataContractJsonSerializerクラスを使用します。引数にはシリアライズ先のデータ型を指定します。この例ですとList<Prefecture>となります。

7行目が実際のデシリアライズ処理です。6行目で作成したシリアライザーがも津ReadObjectメソッドでデータを読み取ります。as List<Prefecture>とすることで読み込んだデータの型を決定し、変数prefへと代入しています。

以上で変数prefには、JSONから読み込んだデータが格納されます。

たった数行でデシリアライズできるので、今後使いどころが増えそうです。

次回はシリアライズについて見ていきます。

関連記事

[UWP] AssetsフォルダからJSONファイルを読み込む