Най-добрият вариант вероятно би бил това:
monto = document["monto"].ToDecimal();
Причината, поради която това работи толкова добре, е, че абстрактният BsonValue
type имплементира метод, който изглежда така:
public virtual decimal ToDecimal()
Конкретните реализации на BsonValue
(напр. BsonInt32
, BsonInt64
, BsonDouble
и т.н.) заменете този член с метода по-долу, който ви дава точно това, което искате, без значение дали драйверът десериализира int, long или double от съхранен документ:
public override decimal ToDecimal()
{
return (decimal)_value;
}
Като алтернатива, във вашия конкретен случай (и ако всички документи в обхвата имат int, съхранен в тяхното поле "monto"), можете просто да напишете:
monto = Convert.ToDecimal(document["monto"].AsInt32)
или дори само
monto = (decimal)(document["monto"].AsInt32)
които са семантично идентични.