MongoDB C# 2 驱动程序 - 无法从 BsonType“Double”反序列化“String”

jkr*_*r01 2 c# mongodb mongodb-.net-driver

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

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

这是我收到错误的代码:

var stockLookups = _stockLookupRepository.GetAllAsync().Result.OrderBy(l => l.Symbol);
Run Code Online (Sandbox Code Playgroud)

这是被调用的方法:

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

这是 StockLookup 类:

public class StockLookup
{
    public ObjectId Id { get; set; }
    public string Symbol { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

yao*_*ing 5

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

db.StockLookup.find({Symbol: {$type: 1}}
Run Code Online (Sandbox Code Playgroud)

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

所有 $types 的引用。您可能需要检查这些数据如何进入您的集合,否则将会有更多非法数据。