[Xamarin.Forms] Jsonファイルを使用する(3)

前回の「Jsonファイルを使用する(2)」では、Json.NetのNuGetパッケージを追加し、デシリアライズ用のクラスを作成しました。

今回は、最終仕上げとしてデシリアライズをする方法を見ていきます。

アジェンダは以下の通りです。

  1. usingの追加
  2. デシリアライズコードの作成

1.usingの追加

はじめに、共通プロジェクト(JsonSample)のJasonSamplePage.xaml.csを開きます。

usingを以下のようにし、Json.Netとデシリアライズをできるようにしておきます。

using System.IO;
using System.Reflection;
using Newtonsoft.Json;
using Xamarin.Forms;

2.デシリアライズコードの作成

あとはプロジェクトに組み込んだperson.jesonを読み込んでデシリアライズをしPersonクラスのインスタンスにデータを入れるコードを書きます。

namespace JsonSample
{
    public partial class JsonSamplePage : ContentPage
    {
        public JsonSamplePage()
        {
			var assembly = typeof(JsonSamplePage).GetTypeInfo().Assembly;
			Stream stream = assembly.GetManifestResourceStream("JsonSample.person.json");

			Person[] persons;


			using (var reader = new System.IO.StreamReader(stream))
			{

				var json = reader.ReadToEnd();
				var rootobject = JsonConvert.DeserializeObject<Rootobject>(json);

				persons = rootobject.persons;
			}
        }
    }
}

7行目は、person.jsonファイルがどこにあるかの情報を取得するものです。typeofの()の中には、このコードが書かれているクラス名を書いています(このコードを書いているクラスはJsonSamplePageというクラスです)。必要に応じて変更して下さい。

8行目は、プロジェクトに追加したperson.jsonのストリームを取得する処理です。GetManifestResourceStreamの引数には、「プロジェクト名.JSONファイル名」を書きまます。

す。

10行目は、デシリアライズ先の変数の準備です。person.jsonは複数のperson情報を持っているので配列にしています。

13行目は、ストリームリーダーのインスタンスを生成して、person.jsonを読み取る準備をしています。

16行目で、peson.jsonからjsonデータを取得し、17行目でデシリアライズをしています。DeserializeObjectの<>にはデータを受け取る器(うつわ)の型を指定するので、前回作成したRootobjectを指定します。また引数にはデシリアライズの元)である(16行目で受け取ったpersonを指定します。

最後に、17行目でデシリアライズ結果を受け取ります。

以上で、プロジェクトに組み込んだjsonファイルからのデータ取得が完了です。あとはpersons変数に入っているデータを使用するのみとなります。