Du kan använda .NET strängtyp istället för ObjectId, du behöver bara dekorera den med BsonRepresentation. Om du använder BsonDateTime kommer du att ha samma konverteringsproblem. Det här är en domänklass i mitt projekt som använder dessa dekoratörer.
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; }
}