Najlepszą opcją byłoby prawdopodobnie to:
monto = document["monto"].ToDecimal();
Powodem, dla którego działa to tak dobrze, jest to, że abstrakcyjna BsonValue
type implementuje metodę, która wygląda tak:
public virtual decimal ToDecimal()
Konkretne implementacje BsonValue
(np. BsonInt32
, BsonInt64
, BsonDouble
itp.) zastąp tego członka poniższą metodą, która daje dokładnie to, czego chcesz, bez względu na to, czy sterownik deserializuje int, long czy double z zapisanego dokumentu:
public override decimal ToDecimal()
{
return (decimal)_value;
}
Alternatywnie, w konkretnym przypadku (i jeśli wszystkie dokumenty w zakresie mają int zapisany w polu „monto”), możesz po prostu napisać:
monto = Convert.ToDecimal(document["monto"].AsInt32)
a nawet po prostu
monto = (decimal)(document["monto"].AsInt32)
które są semantycznie identyczne.