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
?
从文档中阅读:
。在这种情况下,序列化程序将在以下情况下将 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
字段的键。