おそらくこれが最善の選択肢です:
monto = document["monto"].ToDecimal();
これが非常にうまく機能する理由は、抽象的なBsonValue
typeは、次のようなメソッドを実装します:
public virtual decimal ToDecimal()
BsonValue
の具体的な実装 (例:BsonInt32
、BsonInt64
、BsonDouble
など)このメンバーを以下のメソッドでオーバーライドします。これにより、ドライバーが保存されたドキュメントからint、long、またはdoubleを逆シリアル化するかどうかに関係なく、必要なものが正確に得られます。
public override decimal ToDecimal()
{
return (decimal)_value;
}
または、特定の場合(および、スコープ内のすべてのドキュメントの「monto」フィールドにintが格納されている場合)、次のように記述できます。
monto = Convert.ToDecimal(document["monto"].AsInt32)
または単に
monto = (decimal)(document["monto"].AsInt32)
意味的に同一です。