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.