La meilleure option serait probablement d'aller avec ceci :
monto = document["monto"].ToDecimal();
La raison pour laquelle cela fonctionne si bien est que l'abstrait BsonValue
type implémente une méthode qui ressemble à ceci :
public virtual decimal ToDecimal()
Les implémentations concrètes de BsonValue
(par exemple BsonInt32
, BsonInt64
, BsonDouble
etc.) remplacez ce membre par la méthode ci-dessous qui vous donne précisément ce que vous voulez, peu importe si le pilote désérialise un int, un long ou un double à partir d'un document stocké :
public override decimal ToDecimal()
{
return (decimal)_value;
}
Alternativement, dans votre cas spécifique (et si tous les documents concernés ont un int stocké dans leur champ "monto"), vous pouvez simplement écrire :
monto = Convert.ToDecimal(document["monto"].AsInt32)
ou même simplement
monto = (decimal)(document["monto"].AsInt32)
qui sont sémantiquement identiques.