为什么BsonDocument.Parse反序列化了错误的小数点128

时间:2019-03-02 15:35:24

标签: c# mongodb

此链接带有查询字符串:

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之后我得到了:

enter image description here

为什么会这样?解决办法是什么。

thx

更新

我从调试器中看到的是battery_life类型是字符串。值(2.4)类型是? =>

enter image description here

1 个答案:

答案 0 :(得分:1)

好吧,@ ckuri说的对,默认情况下会反序列化为double。所以发生了什么事,当我创建一个电池寿命类型为decimal128的新对象时,将其另存为decimal128。可以在这里用MongoDB指南针看到它:

enter image description here

当我尝试查询时,它正在查找具有double类型的字段battery_life,但该字段不存在,因此它返回一个空数组。

当我手动将类型更改为double并重试查询时,它可以工作。 所以从现在开始,我将对象字段的Battery_life类型更改为

    [BsonRepresentation(BsonType.Double)]
    public double BatteryLife { get; set; }

谢谢你们,我学到了更多的东西!