c# - 为什么 BsonDocument.Parse 反序列化错误的十进制128
问题描述
我有一个带有查询字符串的链接:
https://.../monsters/find?query={"battery_life": 2.4}
控制器中的这个方法:
[HttpGet("find")]
public async Task<IActionResult> GetAllByCriteria([FromQuery(Name = "query")]string query)
{
if (!string.IsNullOrEmpty(query))
{
BsonDocument q = BsonDocument.Parse(query);
var result = await _monsterService.GetAll(q);
return Ok(result);
}
return NotFound();
}
并且模型电池寿命字段是:
[BsonRepresentation(BsonType.Decimal128)]
public decimal BatteryLife { get; set; }
我要求电池寿命等于 2.4,但是当我使用 Postman 进行调试时,在 BsonDocument.Parse 之后我得到:
为什么会发生这种情况以及解决方案是什么。
谢谢
更新
我从调试器中看到的是 battery_life 类型是字符串。值 (2.4) 类型是 ? =>
解决方案
好的,@ckuri 说得对,默认情况下它被反序列化为双精度。所以发生的事情是当我创建一个电池寿命类型为十进制128 的新对象时,它是否保存为十进制128。可以在此处使用 MongoDB 指南针查看:
当我试图查询它时,它正在寻找具有 double 类型的字段 battery_life,它不存在,因此它返回一个空数组。
当我手动将类型更改为 double 并重试查询时,它可以工作。所以从现在开始,我将我的对象字段电池寿命类型更改为
[BsonRepresentation(BsonType.Double)]
public double BatteryLife { get; set; }
多亏了你们,我才学到了更多!
推荐阅读
- php - 如何将文件codeigniter上传到数据库
- c++11 - Undefined Reference To, VSCODE, Cant Link static library to header files
- ubuntu - 如何在 kafka.service 中为 Kafka 中的多个代理运行多个 ExecStart?
- arrays - 方法 require() 不适用于映射的参考图像链接 - React
- html - 如何在html表格中对齐不同的表格行元素
- r - 仅在单击 actionButton 时执行 input-values -> renderPlot() -> plotOutput()
- python - Python中对属性的需求
- javascript - 谷歌折线图轴标签被删除
- sql - 反转字符串顺序
- asp.net-core - 在 Blazor WebAssembly 解决方案中,如何在与服务器 API 不同的端口上托管 Blazor WASM 客户端应用程序