Как захватить вложенные данные в базе данных firebase в реальном времени?

#c# #vue.js #firebase-realtime-database #fire-sharp

#c# #vue.js #firebase-realtime-database #огонь-острый

Вопрос:

Я сделал небольшой веб-сайт для семьи и друзей, чтобы угадать имя, пол, дату рождения и т. Д. Нашего следующего ребенка. Я использовал vue в сочетании с базой данных firebase в реальном времени. Теперь я хочу написать консольное приложение на c #, чтобы подтвердить все ставки и указать победителя. Проблема в том, как я настраиваю базу данных:

 -Users
    -Davy vettorato
        -posts
            -M5HuYYaUuKgqpD9qdVT
                date: "2020-09-23"
                gender: "Meisje"
                weight: "2550"
                length: "52"
                name: "Nele"
                extra_question: "11:00"
    -Dries
        -posts
            -MAerWe2LjQHGM6vEVur
                date: "21/9/2020"
                gender: "Meisje"
                weight: "4,200"
                length: "55"
                name: "Elise"
                extra_question: "11:45"
           -MAerhMgLbAe_sUyg5AE
                date: "21/9/2020"
                gender: "Jongen"
                weight: "4,200"
                length: "55"
                name: "Thibaut"
                extra_question: "11:46"
  

Я могу получить каждого пользователя, но потом я застреваю. Я хочу размещать объекты для каждого пользователя, полученные из БД. Это то, с чего я уже начал

         IFirebaseConfig config = new FirebaseConfig
        {
            AuthSecret = "//",
            BasePath = "https://babyproject-fb0.firebaseio.com/"
        };
            IFirebaseClient client = new FireSharp.FirebaseClient(config);

            if (client != null)
            {
                Console.WriteLine("Connected");
            }

            FirebaseResponse response = client.Get("");
            

            var json = response.Body;
            var result = JObject.Parse(json);

  

Кто-нибудь знает, как я могу получить все отдельные ставки каждого пользователя? Я пробовал с selectTokens, но без каких-либо успехов..

Комментарии:

1. Я бы ожидал чего-то вроде client.Get("User") , и после этого вам придется перебирать JObject.ChildrenTokens : newtonsoft.com/json/help/html /… или Descendants список: newtonsoft.com/json/help/html /…

2. Спасибо за ваш ответ. Я понял это с помощью метода .children . Тогда я мог бы получить пользователя в качестве JProperty. Я поместил всех своих пользователей в список, который я использовал для построения своего следующего пути. Этот метод снова помогает мне продвинуться дальше во вложенном json.

Ответ №1:

  var json = response.Body;
        var result = JObject.Parse(json);

        foreach (var user in result.Children())
        {
            Better better = new Better();

            if (user is JProperty)
            {
                var prop = user as JProperty;
                better.Name = prop.Name.ToString();
                userBetList.Add(better);

                var userPosts = result[better.Name]["posts"].Children();

                foreach (var post in userPosts)
                {
                    var userPost = post as JProperty;
                    var betId = userPost.Name.ToString();
                    var betsOfId = result[better.Name]["posts"][betId].Children();
                    Bet generatedBet = new Bet();

                    foreach (var madeBet in betsOfId)
                    {
                        var bet = madeBet as JProperty;
                        if (bet.Name.ToString() == "datum")
                        {
                            generatedBet.Datum = DateTime.Parse(bet.Value.ToString());
                        }
  

Это пример того, как я устранил проблему. Я думаю, что должен быть более простой способ, но он выполнил свою работу.