/// <summary> /// Read key-value pairs /// </summary> /// <typeparam name="T">Value type</typeparam> /// <returns>Dictionary, key as string, value as specified type. Returns nothing if failed to deserialize.</returns> public DictionaryCallback <string, T> ReadKeyValuePairs <T>() { DictionaryCallback <string, T> callbackHandler = new DictionaryCallback <string, T>(); string route = FirebaseConfig.endpoint + path + ".json" + GetAuthParam(); RESTHelper.Get(route, res => { var resData = fsJsonParser.Parse(res.Text); object deserializedRes = null; fsSerializer serializer = new fsSerializer(); serializer.TryDeserialize(resData, typeof(Dictionary <string, T>), ref deserializedRes); Dictionary <string, T> destructuredRes = (Dictionary <string, T>)deserializedRes; callbackHandler.successCallback?.Invoke(destructuredRes); }, err => { callbackHandler.exceptionCallback?.Invoke(err); }); return(callbackHandler); }
/// <summary> /// Read key-value pairs /// </summary> /// <returns>Dictionary, key is string and value is object, it can be any primitive types or fsData</returns> public DictionaryCallback <string, object> ReadKeyValuePairs() { DictionaryCallback <string, object> callbackHandler = new DictionaryCallback <string, object>(); string route = FirebaseConfig.endpoint + path + ".json" + GetAuthParam(); RESTHelper.Get(route, res => { var resData = fsJsonParser.Parse(res.Text); //in JSON Dictionary <string, object> destructuredRes = new Dictionary <string, object>(); if (resData.IsDictionary) { resData.AsDictionary.ToList().ForEach(x => destructuredRes.Add(x.Key, x.Value._value)); callbackHandler.successCallback?.Invoke(destructuredRes); return; } //No collection, single result (key-value pair) string[] splittedPaths = path.Split('/'); destructuredRes.Add(splittedPaths[splittedPaths.Length - 1], resData._value); //last path as key, resData._value as object callbackHandler.successCallback?.Invoke(destructuredRes); }, err => { callbackHandler.exceptionCallback?.Invoke(err); }); return(callbackHandler); }