L'opzione migliore sarebbe probabilmente questa:
monto = document["monto"].ToDecimal();
Il motivo per cui funziona così bene è che l'abstract BsonValue
type implementa un metodo simile al seguente:
public virtual decimal ToDecimal()
Le implementazioni concrete di BsonValue
(es. BsonInt32
, BsonInt64
, BsonDouble
ecc.) sovrascrivi questo membro con il metodo seguente che ti dà esattamente quello che vuoi, non importa se il driver deserializza un int, un long o un double da un documento memorizzato:
public override decimal ToDecimal()
{
return (decimal)_value;
}
In alternativa, nel tuo caso specifico (e se tutti i documenti in scope hanno un int memorizzato nel loro campo "monto") puoi semplicemente scrivere:
monto = Convert.ToDecimal(document["monto"].AsInt32)
o anche solo
monto = (decimal)(document["monto"].AsInt32)
semanticamente identici.