Lựa chọn tốt nhất có lẽ sẽ đi với điều này:
monto = document["monto"].ToDecimal();
Lý do tại sao điều này hoạt động rất độc đáo là BsonValue
trừu tượng type thực hiện một phương thức giống như sau:
public virtual decimal ToDecimal()
Các triển khai cụ thể của BsonValue
(ví dụ:BsonInt32
, BsonInt64
, BsonDouble
v.v.) ghi đè thành viên này bằng phương thức bên dưới, cung cấp cho bạn chính xác những gì bạn muốn, bất kể trình điều khiển có giải mã int, dài hay kép từ tài liệu được lưu trữ hay không:
public override decimal ToDecimal()
{
return (decimal)_value;
}
Ngoài ra, trong trường hợp cụ thể của bạn (và nếu tất cả các tài liệu trong phạm vi đều có int được lưu trữ trong trường "monto" của chúng), bạn có thể chỉ cần viết:
monto = Convert.ToDecimal(document["monto"].AsInt32)
hoặc thậm chí chỉ
monto = (decimal)(document["monto"].AsInt32)
giống nhau về mặt ngữ nghĩa.