You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms中获取Firebase唯一键及数据读取异常排查

C# WinForms中Firebase数据读写问题

存储代码

我在C# Windows Forms项目中,通过以下代码将WhatsappElements类的对象存入Firebase:

class WhatsappElements
{
    public string Number { get; set; }
    public string Message { get; set; }
}

WhatsappElements newwhatsapp = new WhatsappElements
{
    Number = txt_number.Text + "&N",
    Message = txt_message.Text + "&M",
};
await client.PushAsync("WhatsappElements/Data", newwhatsapp);

Firebase存储结构

数据存储后,Firebase中的结构如下(NBSUSIOSPPSWEIE是Firebase自动生成的唯一键):

- WhatsappElements
  - Data
    - NBSUSIOSPPSWEIE
      Number: [输入的号码]&N
      Message: [输入的消息]&M

读取代码

我在另一应用中用以下代码读取数据:

public async void getdAta()
{
    var resp = await server.GetAsync("WhatsappElements/Data");
    WhatsappElements element = resp.ResultAs<WhatsappElements>();
    MessageBox.Show(element.Number);
}

问题

运行读取代码后,弹出的对话框显示Number为空。请问:

  1. 出错的原因是什么?
  2. 如何正确读取数据?
  3. 如何获取Firebase生成的唯一键?

错误原因

PushAsync方法会在指定的WhatsappElements/Data路径下自动生成一个唯一随机键(比如你看到的NBSUSIOSPPSWEIE),实际的WhatsappElements对象是存储在这个唯一键的子路径下的。因此WhatsappElements/Data对应的是字典结构(键为唯一ID,值为对象),而不是直接的WhatsappElements对象。你直接用ResultAs<WhatsappElements>反序列化,无法匹配字典结构,导致对象属性为空。

正确读取数据的方式

方式1:读取所有对象(遍历字典)

将结果反序列化为Dictionary<string, WhatsappElements>,遍历字典即可获取所有对象:

public async void getdAta()
{
    var resp = await server.GetAsync("WhatsappElements/Data");
    var elementsDict = resp.ResultAs<Dictionary<string, WhatsappElements>>();
    
    foreach (var item in elementsDict)
    {
        string uniqueKey = item.Key;
        WhatsappElements element = item.Value;
        MessageBox.Show($"号码:{element.Number}\n唯一键:{uniqueKey}");
    }
}

方式2:读取单个指定对象(已知唯一键)

如果知道目标对象的唯一键,可以直接访问该键的路径:

public async void getdAta()
{
    // 替换成实际的唯一键
    var resp = await server.GetAsync("WhatsappElements/Data/NBSUSIOSPPSWEIE");
    WhatsappElements element = resp.ResultAs<WhatsappElements>();
    MessageBox.Show(element.Number);
}

获取Firebase生成的唯一键

有两种常用方式:

  1. 存储时直接获取:调用PushAsync后,返回的响应中包含生成的唯一键:
var pushResult = await client.PushAsync("WhatsappElements/Data", newwhatsapp);
string uniqueKey = pushResult.Key; // 得到Firebase生成的唯一键
  1. 读取时从字典中获取:如方式1中的item.Key,每个字典键就是对应对象的唯一ID。

内容的提问来源于stack exchange,提问作者علي امجد علي كمال

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:10:29