首页 > 解决方案 > 从 Firebase 反序列化 JSON

问题描述

我有一个来自 firebase 的 JSON 文件,其中包含一个具有自己唯一名称的节点列表,如果可能的话,我想像使用 Newtonsoft.Json 的普通 JSON 数组一样将所有内容反序列化到一个列表中,如下所示:

using (StreamReader r = new StreamReader(filePath))
{
    string json = r.ReadToEnd();
    Console.WriteLine(json);
    List<Card> items = JsonConvert.DeserializeObject<List<Card>>(json);
} 

但是由于 Firebase 的这种 JSON 格式,每个节点都有一个唯一的名称,有没有办法像普通的 JSON 数组一样反序列化它们而不使用 Newtonsoft.Json 编辑 JSON 的格式?

我可以放心地忽略节点名称,因为我只需要每个对象的内容并将它们放在一个列表中。

{
  "131F78DB" : {
    "IDNumber" : "5526F",
    "Name" : "NAME1"
  },
  "19505EAD" : {
    "IDNumber" : "5132F",
    "Name" : "TEMPORARYHR10103"
  },
  "19539B6D" : {
    "IDNumber" : "10102",
    "Name" : "TEMPORARYHR10102"
  }
}

我将使用像这样的大型 JSON 文件,所以如果可能的话,我想避免进行任何手动字符串操作来删除节点名称。

标签: c#jsonfirebase

解决方案


你可以Dictionary像这样反序列化它:

var items = JsonConvert.DeserializeObject<Dictionary<string, Card>>(json);

这样,您仍然可以像 a 一样对其进行迭代list,它与 json 的格式匹配,并且您仍然拥有所有可用信息(即使您不需要键值)。

如果你真的想把它作为一个列表,你可以添加Select(x => x.Value).ToList()来创建一个List<Card>.


推荐阅读