【问题标题】:Firesharp returning Mixed Object and Array JSON | C#Firesharp 返回混合对象和数组 JSON | C#
【发布时间】:2021-11-30 02:33:12
【问题描述】:

我在 Firebase 中有这个数据库:

touristSpots {
      1stSpot : {
          key: value,
          ...
          nearSpots: {
                     3 : {
                       somekey: somevalue
                     }
                     5 : {
                       somekey2: somevalue2
                     }
          }
      },
      2ndSpot : {
          key : value,
          ...
          nearSpots: {
                     2 : {
                       somekey3: somevalue3
                     },
                     4 : {
                       somekey4: somevalue4
                     },
          }
      }
}

因此,我希望得到与上述相同的响应。但 Firebase 的响应类似于:

touristSpots {
      1stSpot : {
          key: value
          ...
          nearSpots[
                     null, {
                       somekey: somevalue
                     },
                     null, {
                       somekey2: somevalue2
                     }
          ]
      }
      2ndSpot : {
          key : value
          ...
          nearSpots: {
                     2 : {
                       somekey3: somevalue3
                     }
                     4 : {
                       somekey4: somevalue4
                     }
          }
      }
}

如您所见,第一条记录的 nearSpot 变成了数组 [],第二条变成了 Object {}。我可以处理它们中的每一个,但是像这样的混合结果然后程序由于转换 [] 而不是对象而无法将它们转换为对象。

我是 firebase 新手,我知道 C# 的支持非常有限。我似乎也找不到解决方法。有没有其他人经历过这个?谢谢

【问题讨论】:

    标签: c# json .net firebase-realtime-database


    【解决方案1】:

    您在数据库中使用顺序的数字键,这意味着 SDK 和 REST API 假定您正在存储一个数组。当您检索此类结构的项目的子集时,您最终可能会得到一个包含null 元素的数组:

    nearSpots[
       null,                    // index 0: no item, so null value
       { somekey: somevalue },  // index 1
       null,                    // index 2: no item, so null value 
       { somekey2: somevalue2 } // index 3
    ]
    

    在 Firebase 中使用数组通常被认为是一种反模式,并且在这篇经典博文中不鼓励使用:Best Practices: Arrays in Firebase

    最简单的解决方法是使用带有短前缀的键,例如 key0key1 等。这样可以防止 Firebase SDK/API 将结果强制转换为数组。

    【讨论】:

    • 没想到同事给我的导入数据库会出现问题!非常感谢,我已经卡了3天了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多