C#使用MongoDB.Driver关联集合时属性反序列化报错如何解决
在C#中使用MongoDB有没有方法可以关联两个集合?
我认为问题出在@as...上

我创建了包含Mail类和Profile类组合属性的主类,但是出现了其他错误。

我在Studio 3T中可以正常获取数据
相关模型如下所示




运行时抛出异常:System.FormatException: 'An error occurred while deserializing the property.',请问该如何解决?
解决方案
你遇到的反序列化报错是关联查询后返回数据结构和C#定义模型不匹配导致的,C#中MongoDB关联两个集合的实现和对应报错修复方法如下:
1 基于$lookup的关联查询(推荐)
这是你当前选用的方案,按以下步骤排查修复反序列化报错:
- 字段名不匹配修复:MongoDB默认使用驼峰命名字段,C#模型如果是帕斯卡命名,需要给属性显式指定映射字段,示例:
也可以全局配置MongoDB驱动的命名规则为驼峰,避免每个属性单独加特性。[BsonElement("mail")] public Mail UserMail { get; set; } - 数据类型不匹配修复:确认Studio 3T中关联返回的字段是单个对象还是数组,如果是数组,C#模型对应属性要定义为
List<关联类型>,不能直接用单个关联类作为属性类型。 - 多余字段忽略:给组合主类添加
[BsonIgnoreExtraElements]特性,驱动会自动忽略模型中没有定义的返回字段,不会触发反序列化异常。
2 手动关联查询
如果不想处理聚合查询的反序列化配置,可以分两步实现关联:
- 先查询主集合,提取所有需要关联的外键值(比如profileId集合)
- 用外键值作为过滤条件查询关联集合,拿到所有匹配的关联数据
- 在内存中将主集合数据和关联数据组装为你需要的组合类对象,该方案无反序列化兼容问题,适合数据量不大的业务场景。
内容的提问来源于stack exchange,提问作者Rakesh Ravi G
相关产品推荐
相关产品推荐

