Xamarin.Forms: Невозможно десериализовать / получить данные JSON из реальной базы данных Firebase - PullRequest
1 голос
/ 11 апреля 2019

Это мои первые вопросы о переполнении стека, поэтому я прошу прощения, если он отформатирован неправильно.Я пытался использовать Xamarin.Forms в сочетании с базой данных Firebase в реальном времени, но не могу правильно получить данные.Я продолжаю получать следующее исключение.

(я не могу понять, как связать локальное изображение, поэтому вот сообщение об исключении):

Unhandled Exception:

Firebase.Database.FirebaseException: Exception occured while processing the request.

Url: https://MY_DATABASE_LINK/users/user_name1/.json
Request Data: 
Response: {"age":"Age_Val1","fName":"First_Val1","lName":"Last_Val1"}

Я использую Xamarin сNuGet пакет FirebaseDatabase.net и пытался следовать следующим учебникам и онлайн-вопросы:

https://www.c -sharpcorner.com / article / xamarin-forms-working-with-firebase-realtime-database-crud-operations /

https://forums.xamarin.com/discussion/80017/firebase-database-query

Я пробовал использовать обе техники, и выдается одно и то же исключение.Кажется, база данных возвращает мне правильные данные в формате JSON, но мой код не может десериализовать их.Вот моя структура базы данных JSON и код, который я пытаюсь запустить -

FirebaseHelper.cs:

    public class FirebaseHelper
    {
        FirebaseClient firebase = new FirebaseClient("https://MY_DATABASE_LINK.firebaseio.com/");

        public async Task<List<Person>> GetAllPersons()
        {

            return (await firebase
              .Child("users")
              .Child("user_name1")
              .OnceAsync<Person>()).Select(item => new Person
              {
                  FName = item.Object.FName,
                  LName = item.Object.LName,
                  Age = item.Object.Age
              }).ToList();
            }

    }

Person.cs:

public class Person
    {
        public string FName { get; set; }
        public string LName { get; set; }
        public string Age { get; set; }
    }
JSON Database Structure:

{
  "users" : {
    "user_name1" : {
      "age" : "Age_Val1",
      "fName" : "First_Val1",
      "lName" : "Last_Val1"
    },
    "user_name2" : {
      "age" : "Age_Val2",
      "fName" : "First_Val2",
      "lName" : "Last_Val2"
    },
    "user_name3" : {
      "age" : "Age_Val3",
      "fName" : "First_Val3",
      "lName" : "Last_Val3"
    }
  }
}
Alt code tested:

List<Person> list_users = new List<Person>();
string[] ss = new string[] { "it", "succeeded" };
var items = await firebase
     .Child("users")
     .OrderByKey()
     .OnceAsync<Person>();

foreach (var item in items)
{
     Person user = new Person
         {
             FName = item.Object.FName,
             LName = item.Object.LName,
             Age = item.Object.Age
         };
     list_users.Add(user);
}

return list_users;

Я ожидал, что асинхронная пустота извлечет все объекты / данные из JSONОбъект 'user_name1' и назначить их каждой переменной в Person.cs, а затем создать единый список длины первого пользователя.

Я также сделал это только с Child («пользователи»), и он возвратил объект JSON большего размера, но все равно выдал исключение (ожидал список пользователей с длиной 3)

IМне просто интересно, почему это исключение выбрасывается?Или, если я пытаюсь прочитать и назначить данные неправильно, и если да, то как мне поступить правильно?

1 Ответ

0 голосов
/ 12 апреля 2019

Из вашего Person.cs:

public class Person
{
    public string FName { get; set; }
    public string LName { get; set; }
    public string Age { get; set; }
}

Тогда FirebaseHelper.cs как минимум должно быть так:

public class FirebaseHelper
   {
        FirebaseClient firebase = new FirebaseClient("https://MY_DATABASE_LINK.firebaseio.com/");

        public async Task<List<Person>> GetAllPersons()
        {

            return (await firebase
              .Child("<table_name>") // should only be your table name,here should be 'users'
              .OnceAsync<Person>()).Select(item => new Person
              {
                  FName = item.Object.FName,
                  LName = item.Object.LName,
                  Age = item.Object.Age
              }).ToList();
            }
}

Наконец, найдите людей следующим образом:

FirebaseHelper firebaseHelper = new FirebaseHelper(); 
var allPersons = await firebaseHelper.GetAllPersons(); 

Если есть другая проблема, вы можете показать скриншот таблицы_имя базы данных firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...