[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ファイルを読み込む

 

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

今回はAssetsフォルダからJSONファイルを読み込む方法を見ていきます。

はじめに、以下のようなJSONファイル(newCity.json)をAssetsフォルダに配置します。

このJSONファイルは県名とその県の天気予報発表地域を格納したものとなっています。

[
	{"Cities":[
		{"Id":"030010","Name":"盛岡"},
		{"Id":"030020","Name":"宮古"},
		{"Id":"030030","Name":"大船渡"}],
		"Name":"岩手"
	}
]

JSONファイル配置後のAssetsフォルダ

Assetsフォルダに配置したファイルのパスは以下のように記述することができます。

ms-appx:///Assets/newCity.json

そして、以下がAssetsフォルダに配置したJSONファイルを読み取り文字列へと変換するコードになります。

// Assetsからのファイル取り出し
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/newCity.json"));
// ファイルの読み込み
string json = await FileIO.ReadTextAsync(file);

1行目のコードでは、AssetsフォルダのファイルパスをUrlへと変換し、StoregeFile型のデータを作成する処理です。

作成したStorageFileデータは、FileIO.ReadTextAsyncメソッドで読み取ることができます。読み取ったデータは、はじめに示したJSONファイルを文字列へと変換したものになります。

あとは、この文字列(コード中の変数json)をどう処理するかだけです。

単に文字列処理をして必要なデータを抜き出すもよし、デシリアライズして自作クラスにマッピングするもよしです。

ということで、次回はこの文字列をデシリアライズする方法を紹介します。

[UWP] スプラッシュスクリーンを表示する

今回はスプラッシュスクリーンの表示方法について見ていきます。

スプラッシュスクリーンはPackage.appmanifestファイルで設定をします。Package.appmanifestを開き、「ビジュアル資産」タブを選択します。

続いて、左側の一覧で「スプラッシュスクリーン」を選択し、右側でスプラッシュスクリーンに表示する画像を選択します。

背景色の欄では、スプラッシュスクリーン全体の背景色を設定します。

以上の設定をしておくだけで、自動でスプラッシュスクリーンが表示されます。

スプラッシュスクリーンの設定