【问题标题】:MongoDB C# 2 Driver -- Cannot deserialize 'String' from BsonType 'Double'MongoDB C# 2 驱动程序 - 无法从 BsonType 'Double' 反序列化 'String'
【发布时间】:2015-06-01 01:25:52
【问题描述】:

我是 MongoDB 的新手。我正在尝试检索查找集合中的所有条目。我收到以下错误:

{“反序列化 Stock.Models.StockLookup 类的 Symbol 属性时出错:无法从 BsonType 'Double' 反序列化 'String'。”}

这是我收到错误的代码:

var stockLookups = _stockLookupRepository.GetAllAsync().Result.OrderBy(l => l.Symbol);

这里是被调用的方法:

public async Task<List<StockLookup>> GetAllAsync()
    {
        var result = await _collection.Find(sl => sl.Symbol != null).ToListAsync();
        return result;
    }

这是 StockLookup 类:

public class StockLookup
{
    public ObjectId Id { get; set; }
    public string Symbol { get; set; }
    public string Name { get; set; }
}

谁能帮我找出问题所在?任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 我认为信息是直截了当的。这意味着属性Symbol 被定义为string,但在数据库中它是double。您应该检查您的数据是否合法。

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

消息几乎解释了自己。您将Symbol 定义为string,而在数据库中有一些文档具有double 类型Symbol。它导致了反序列化问题。 要找出这些非法数据,请尝试:

db.StockLookup.find({Symbol: {$type: 1}}

不要如果您的集合中有大量数据,请不要这样做。没有这方面的索引,它会很慢。在这种情况下,您可能希望在检查类型之前添加其他条件以过滤掉数据。

有一个reference of all $types。您可能需要检查这些数据是如何进入您的集合的,否则会有更多非法数据。

【讨论】:

  • 我跑了这条评论,返回了 0 个结果。
  • 我的命令中有错字。我纠正了错字,它找到了记录。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-12-09
  • 2013-11-08
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多