c# - Firebase 数据 - 转换值时出错

标签 c# json firebase firebase-realtime-database xamarin.android

我两天前发布了关于 firebase 的问题: Android Firebase - add authenticated user into database

我得到了我需要的帮助,解决了第一个问题。但是现在我有一个新问题。我在谷歌上搜索了很长一段时间,有一些关于这个问题的帖子,但没有解决我的问题。我不想重复之前的问题,所以我发布了一个新问题。

当我尝试从 firebase 数据库中读取插入的数据时出现此错误:

Newtonsoft.Json.JsonSerializationException: Error converting value "test@user.com" to type 'carServiceApp.My_Classes.Account'. Path 'email', line 1, position 24.

代码如下:

 private async Task LoadData()
    {
        FirebaseUser users = FirebaseAuth.GetInstance(loginActivity.app).CurrentUser;
        id = users.Uid;

        var firebase = new FirebaseClient(loginActivity.FirebaseURL);
        var items = await firebase.Child("users").Child(id).OnceAsync<Account>();


        foreach (var item in items)
        {
            Account user = new Account();
            user.uid = item.Object.uid;
            user.name = item.Object.name;
            user.lastName = item.Object.lastName;
            user.phone = item.Object.phone;
            user.email = item.Object.email;

            userInput_ime.Text = user.name;
            userInput_prezime.Text = user.lastName;
            userInput_broj.Text = user.phone;
            userInput_email.Text = user.email;
        }

    }

这是 Firebase 数据:

-users
    -jwAP2dYNzJeiF3QlmEIEQoruUkO2
       email: "test@user.com"
       lastName: "user"
       name: "test"
       phone: "12421"
       uid: "jwAP2dYNzJeiF3QlmEIEQoruUkO2"

有趣的是,当我尝试用这个读取数据时:

var items = await firebase.Child("users").OnceAsync<Account>();

这很好用(我得到了最后插入的用户)。但是当我添加 'uid' 节点时,我得到了错误。我试图解决这个问题已经有一段时间了,但我就是想不通。我猜 account 类没有问题,因为它在没有 uid 节点的情况下工作,但在添加另一个 child() 方法时不起作用。

您可以在顶部的链接中看到其他信息(帐户类别代码和将该数据存储到数据库中的方式)。

注意:我尝试在 Account 类中添加构造函数,但这没有帮助。

最佳答案

好吧,我并没有找到解决这个问题的方法,我也不明白为什么会这样,但我找到了解决方法。我认为这不是理想的解决方案,也不能解决现有问题。或者可能是我不理解 firebase 逻辑的问题,但这就是我想出的。

因此,考虑到如果我没有指定 uid 节点一切正常,很明显 firebase 中的类和数据存在一些问题,我猜是匹配问题。无论如何,我决定拥有最后一个 uid 节点,这样我就可以选择特定的用户,并且在 firebase 中拥有相同的数据,以防一切正常。所以,这就是我将数据插入 firebase 的方式:

  var item = firebase.Child("users").Child(id).PostAsync<Account>(user);

这创建了用户节点和子节点。 PostAsync 方法使用随 secret 钥创建了另一个节点。 所以当我尝试阅读时:

var data = await firebase.Child("users").Child(id).OnceAsync<Account>();

它工作没有问题。现在 firebase 数据看起来像这样:

   users
     JPKdQbwcXbhBatZ2ihBNLRauhV83
        -LCXyLpvdfQ448KOPKUp 
              email:  "spider@man.com"
              lastName:  "man"
              name:  "spider"
              phone:  "14412"
              uid: "JPKdQbwcXbhBatZ2ihBNLRauhV83"

有一点冗余,我基本上有两个 ID,但我不知道如何创建我的类以便我可以通过任何其他方式获取该数据,所以我这样做了。它工作正常。

如果有人有更好的解决方案,我会很乐意改变它。干杯

关于c# - Firebase 数据 - 转换值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179731/

相关文章:

java - 使用 Guice 自动绑定(bind)所有 `Services`

c# - 实例化包含 static void Main() 的类

c# - 无法创建类型为 'Anonymous type' 的常量值

c# - 如何使用电影播放器​​的两个控件?

java - 如何检测 Java 中嵌入的 JSON 元素是 JSONObject 还是 JSONArray

firebase - 在 Firebase 中手动记录应用内购买事件

firebase - Flutter firestore 快照始终为 null 或空列表

java - 如何通过像这样为字符串添加前缀来防止劫持?

javascript - Highcharts - 饼图动态更改切片颜色

unity3d - Firebase for Unity – 离线持久性