La mejor opción probablemente sería ir con esto:
monto = document["monto"].ToDecimal();
La razón por la que esto funciona tan bien es que el resumen BsonValue type implementa un método que se ve así:
public virtual decimal ToDecimal()
Las implementaciones concretas de BsonValue (por ejemplo, BsonInt32 , BsonInt64 , BsonDouble etc.) invalide este miembro con el siguiente método que le brinda exactamente lo que desea, sin importar si el controlador deserializa un int, long o double de un documento almacenado:
public override decimal ToDecimal()
{
return (decimal)_value;
}
Alternativamente, en su caso específico (y si todos los documentos en el alcance tienen un int almacenado en su campo "monto"), simplemente puede escribir:
monto = Convert.ToDecimal(document["monto"].AsInt32)
o incluso solo
monto = (decimal)(document["monto"].AsInt32)
que son semánticamente idénticos.