A melhor opção provavelmente seria ir com isso:
monto = document["monto"].ToDecimal();
A razão pela qual isso funciona tão bem é que o abstrato
BsonValue
type implementa um método que se parece com isso:public virtual decimal ToDecimal()
As implementações concretas de
BsonValue
(por exemplo, BsonInt32
, BsonInt64
, BsonDouble
etc.) substitua este membro pelo método abaixo, que fornece exatamente o que você deseja, não importa se o driver desserializa um int, um long ou um double de um documento armazenado:public override decimal ToDecimal()
{
return (decimal)_value;
}
Alternativamente, no seu caso específico (e se todos os documentos no escopo tiverem um int armazenado em seu campo "monto"), você pode simplesmente escrever:
monto = Convert.ToDecimal(document["monto"].AsInt32)
ou mesmo apenas
monto = (decimal)(document["monto"].AsInt32)
que são semanticamente idênticos.