前回の「Jsonファイルを使用する(2)」では、Json.NetのNuGetパッケージを追加し、デシリアライズ用のクラスを作成しました。
今回は、最終仕上げとしてデシリアライズをする方法を見ていきます。
アジェンダは以下の通りです。
- usingの追加
- デシリアライズコードの作成
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変数に入っているデータを使用するのみとなります。
コメント