如何遍历Firebase JSON并提取email、name、points字段值?
解决Firebase自动生成键的JSON数据读取问题
看起来你已经找到解决方案了,我把这个问题的逻辑梳理清楚,方便其他遇到同样困扰的开发者参考:
你的核心痛点是Firebase返回的JSON顶层是自动生成的随机字符串键,每个键对应包含email、name、points的用户对象,普通反序列化方式没法直接适配这种键值对结构。
先明确你的Firebase数据结构
{ "23ds1f5":{ "email":"email@example.com", "name":"my name", "points":0 }, "dsfv57s":{ "email":"email2@example.com", "name":"this name", "points":0 }, "r6s7gv98268":{ "email":"lol@example2.com", "name":"nameHere", "points":0 } }
为什么之前的尝试没成功?
- 直接反序列化到
Data对象:Data类无法匹配顶层的随机键结构,JSON.NET不知道如何把这些键映射到对象属性。 - 用
Dictionary<string, string>:每个值不是字符串,而是复杂的用户对象,反序列化会直接报错。 - 用
JObject遍历:能拿到键和对应的子JSON对象,但需要额外解析子对象才能提取字段,操作不够直接。
正确解决方案:用Dictionary<string, Data>反序列化
你的JSON本质是字符串键到用户对象的映射,Dictionary<string, Data>正好完美匹配这个结构:
第一步:确保Data类定义正确
// 属性名和JSON字段名直接匹配,无需额外配置 public class Data { public string email { get; set; } public string name { get; set; } public int points { get; set; } } // 如果习惯用C#大驼峰命名,可通过JsonProperty特性做字段映射 // public class Data // { // [JsonProperty("email")] // public string Email { get; set; } // [JsonProperty("name")] // public string Name { get; set; } // [JsonProperty("points")] // public int Points { get; set; } // }
第二步:反序列化并遍历数据
// 假设json是从Firebase获取到的响应体字符串 Dictionary<string, Data> userList = JsonConvert.DeserializeObject<Dictionary<string, Data>>(json); foreach (KeyValuePair<string, Data> entry in userList) { // entry.Key是Firebase自动生成的随机用户ID Console.WriteLine($"用户ID: {entry.Key}"); // entry.Value是对应的用户对象,直接访问属性即可获取数据 Console.WriteLine($"邮箱: {entry.Value.email}"); Console.WriteLine($"姓名: {entry.Value.name}"); Console.WriteLine($"积分: {entry.Value.points}"); }
原理说明
Json.NET会自动识别JSON的键值对结构:把每个顶层随机字符串作为字典的Key,把对应的子JSON对象反序列化为Data类型实例作为字典的Value,遍历字典就能轻松拿到所有用户的完整信息。
内容的提问来源于stack exchange,提问作者Youlle1934
相关产品推荐
相关产品推荐

