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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:39:02