Firebase Realtime Database から得たデータをC# Dictonary<string,int>に変換するまで
課題
FirebaseでGetValueAsync()したデータは
DataSnapShot型として取得されます。
しかし、これを扱いやすい形(今回だとDictonary<stromg,int>)
にする方法が分からないので明確にしたい
解決法
元々のFirebaseの形式を下記とします。
使用したUsing
using UnityEngine; using Firebase.Database; using System; using System.Collections.Generic; using System.Linq;
① DataSnapshot型として取得
var playerData = await reference.Child("PlayerDB").Child("1bf593cf-ad89-40fb-8553-e834edff9578").GetValueAsync();
② Dictonary<stromg,int>型に変換してから代入
Dictionary<string, int> pDataDict = ConvertDict(playerData.Value);
private Dictionary<string,int> ConvertDict(object value) { Dictionary<string, int> returnDict = (value as Dictionary<string, object>).ToDictionary(k => k.Key, k => Convert.ToInt32(k.Value)); return returnDict; }
説明
取得DataSnapShot型の変数内にあるオブジェクトは
as によるキャストで
Dictionaly<string, object>型による型変換はできるようです。
ConvertDict*1関数は
キャストでDictionaly<string, object>に変換したのち
更に、LinqのToDictonary関数で、値の型をint型に変更しています。
懸念点
- 複数の型を含む形になった場合上記では対応できないでしょう。
→その場合は、値を一つずつ変換したほうが安心かもしれません。
今回はここまで、それではまた。