System.FormatException' 发生在 MongoDB.Bson 中.dll - XXX 不是有

本文关键字:dll XXX Bson MongoDB FormatException System | 更新日期: 2023-09-27 18:31:04

我创建了一个这样的C#类:

 public class Employee
    {
        [BsonRepresentation(BsonType.ObjectId)]
        public string Name { get; set; }
        public int Age { get; set; }
        public List<string> Address { get; set; }
    }

当我尝试像这样保存此信息(使用 MongoDB)时:

   var e = new Employee();
    e.Address = new List<string>();
    e.Address.Add("Address 1");
    e.Address.Add("Address 2");
    e.Age = 333;
    e.Name = "Some Name";
   context.Employees.Insert(e);

我收到以下错误:

An unhandled exception of type 'System.FormatException' occurred in MongoDB.Bson.dll
Additional information: 'Some Name' is not a valid 24 digit hex string.

如何制作一个字符串字段来充当 MongoDB 中的ObjectID

System.FormatException' 发生在 MongoDB.Bson 中.dll - XXX 不是有

从文档中阅读:

。在这种情况下,序列化程序将在以下情况下将 ObjectId 转换为字符串 从数据库中读取数据,并将字符串转换回 将数据写入数据库时的对象 Id(字符串值必须是 有效的对象标识) ....

请从字符串中删除空格。比一切都应该工作!

为了证明您是否拥有有效的 ObjectId,请阅读以下 SO-Post:MongoDB Node 检查 objectid 是否有效

编辑:最终答案是:You have to change [BsonRepresentation(BsonType.ObjectId)] to [BsonId]

有效的 ObjectId 字符串类型具有 12 字节的十六进制字符串,如 '546c776b3e23f5f2ebdd3b03'

您为属性Name输入[BsonRepresentation(BsonType.ObjectId)]。 这意味着 C# 驱动程序会在任何序列化操作之前自动将字符串转换为 ObjectId,反之亦然。

删除[BsonRepresentation(BsonType.ObjectId)]

如果您在应用启动时注册BsonSerializer.RegisterIdGenerator(typeof(string), new StringObjectIdGenerator()),如果您的实体有一个名为 Id 的属性,mongo 将字符串而不是 ObjectId 放入 Id 字段,您可以使用任何字符串作为Id字段的键。