Die beste Option wäre wahrscheinlich dies:
monto = document["monto"].ToDecimal();
Der Grund, warum das so gut funktioniert, ist, dass der abstrakte BsonValue
type implementiert eine Methode, die so aussieht:
public virtual decimal ToDecimal()
Die konkreten Implementierungen von BsonValue
(zB BsonInt32
, BsonInt64
, BsonDouble
usw.) überschreiben Sie dieses Mitglied mit der folgenden Methode, die Ihnen genau das gibt, was Sie wollen, egal ob der Treiber ein int, ein long oder ein double aus einem gespeicherten Dokument deserialisiert:
public override decimal ToDecimal()
{
return (decimal)_value;
}
Alternativ können Sie in Ihrem speziellen Fall (und wenn alle Dokumente im Geltungsbereich ein int in ihrem "Monto"-Feld gespeichert haben) einfach schreiben:
monto = Convert.ToDecimal(document["monto"].AsInt32)
oder auch nur
monto = (decimal)(document["monto"].AsInt32)
die semantisch identisch sind.