使用BsonSerializer.Deserialize()反序列化含id的BSON字符串报错求助
BSON反序列化'id'字段匹配问题解决建议
针对你遇到的Element 'id' does not match any field or property错误,可尝试以下排查和解决步骤:
检查序列化约定冲突
若项目中启用了全局序列化约定(如CamelCaseElementNameConvention),可能会覆盖你显式设置的[BsonElement]特性。可以在反序列化时指定忽略全局约定的配置:var config = new BsonSerializationOptions { Conventions = new ConventionPack() // 空约定包,仅使用显式特性映射 }; var actualJsonDeserializedModel = BsonSerializer.Deserialize<GisSourceFileModel>(bsonDocument, config);确认模型类的命名空间与引用一致性
报错中显示的类是Mapping.Plugin.BLL.Models.GisSourceFileModel,检查测试代码中引用的是否为同一个命名空间下的类,避免因重复定义不同类导致的映射失败。显式注册类映射
通过BsonClassMap强制注册字段映射规则,确保序列化器能正确识别'id'字段:static GisSourceFileModel() { BsonClassMap.RegisterClassMap<GisSourceFileModel>(map => { map.MapField(x => x.TypeName).SetElementName("_typeName"); map.MapField(x => x.CompressionType).SetElementName("compressionType"); map.MapField(x => x.FileType).SetElementName("fileType"); map.MapField(x => x.Id).SetElementName("id"); map.MapField(x => x.LocalPath).SetElementName("localPath"); map.MapField(x => x.Name).SetElementName("name"); map.MapField(x => x.Stored).SetElementName("stored"); }); }这段代码放在
GisSourceFileModel类内部,确保程序启动时完成映射注册。排查BSON字符串的特殊字符
检查测试代码中srcStr的'id'字段是否包含不可见特殊字符(如全角空格、Unicode控制字符),可以将字符串复制到文本编辑器中查看,或尝试重新手动输入'id'字段的键名。验证属性访问权限
确保GisSourceFileModel的Id属性是public访问修饰符(你的代码中已经是,但可再次确认编译后的程序集是否存在访问权限问题)。
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

