Firebase Realtime Database から得たデータをC# Dictonary<string,int>に変換するまで

課題

FirebaseでGetValueAsync()したデータは

DataSnapShot型として取得されます。


しかし、これを扱いやすい形(今回だとDictonary<stromg,int>)

にする方法が分からないので明確にしたい

解決法

元々のFirebaseの形式を下記とします。

f:id:cacapon:20210805151406p:plain

使用した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型に変更しています。

懸念点

  • 複数の型を含む形になった場合上記では対応できないでしょう。
    →その場合は、値を一つずつ変換したほうが安心かもしれません。

今回はここまで、それではまた。

*1:命名が微妙かとは思いますが