Unity中如何反序列化Firestore文档内的嵌套map字段
解决方案
方案1:整体文档反序列化(推荐)
Firebase Firestore的C# SDK原生支持嵌套Map的自动反序列化,你不需要手动提取嵌套字段,只需要定义对应完整文档结构的实体类,将myMap字段的类型直接设置为你加了[FirestoreData]特性的目标类即可:
using Firebase.Firestore; // 你的嵌套Map对应的实体类(你原代码里的类名叫MyData,如果你要转成MyMap请统一类名和特性配置) [FirestoreData] public class MyMap { [FirestoreProperty("myBoolean")] public bool MyBoolean { get; set; } [FirestoreProperty("myNumber")] public int MyNumber { get; set; } [FirestoreProperty("myTimestamp")] public DateTime MyTimestamp { get; set; } } // 完整文档对应的实体类 [FirestoreData] public class FullDocument { // 文档下其他顶层字段按需添加 [FirestoreProperty("myMap")] public MyMap MyMap { get; set; } } // 直接转换整份文档即可自动解析嵌套的myMap FullDocument doc = myDocumentSnapshot.ConvertTo<FullDocument>(); MyMap myMap = doc.MyMap;
方案2:单独提取嵌套字段反序列化
如果你不需要解析整份文档,只想单独获取myMap字段,可以直接用DocumentSnapshot自带的GetValue<T>方法,无需先转成字典:
// 直接指定字段名和目标类型,SDK会自动完成反序列化 MyMap myMap = myDocumentSnapshot.GetValue<MyMap>("myMap");
注意事项
- 你的目标嵌套类必须正确添加
[FirestoreData]特性,每个属性对应的Firestore字段要通过[FirestoreProperty]声明对应名称,否则会出现属性赋值失败的问题 - 你原尝试的写法失效是因为
ToDictionary()返回的字典里的值是object类型,没有ConvertTo扩展方法,无需转字典,直接用SDK自带的字段读取方法即可
内容的提问来源于stack exchange,提问作者Evorlor
相关产品推荐
相关产品推荐

