Możesz użyć typu string .NET zamiast ObjectId, wystarczy ozdobić go za pomocą BsonRepresentation. Jeśli użyjesz BsonDateTime, będziesz miał ten sam problem z konwersją. To jest klasa domeny w moim projekcie, która używa tych dekoratorów.
public class DocumentMetadata
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
public string FullName { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
public DateTime DownloadTime { get; set; }
}