【问题标题】:Enum can't be deserialized when using Linq使用 Linq 时无法反序列化枚举
【发布时间】:2013-04-11 19:48:31
【问题描述】:

所以我有这个枚举

public enum JobStatus
{
    Created = 0,
    Assigning = 1,
    Assigned = 2,
    Started = 3,
    Finished = 4
}

在这个界面

public interface IJob
{
    Guid Id { get; set; }
    JobStatus Status { get; set; }
    bool IsFaulted { get; set; }
    string ErrorMessage { get; set; }
}

我将其中一个人放入数据库中,一切正常。就是这个样子。

{ "_id" : { "$uuid" : "4e5002b6-3c80-b497-4a33-46b0ea5a39bf"} 
, "_t" : "MyJobObject" 
, "Status" : 0 
, "IsFaulted" : false 
, "ErrorMessage" :  null  
, "Location" : "overthere"}

然后当我尝试使用此代码获取一个时

Database.GetCollection<IJob>("Jobs").AsQueryable().FirstOrDefault(x=>x.Status == JobStatus.Created);

抛出异常

Unable to determine the serialization information for the expression: jobs.Status.
   at MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(Expression node, Dictionary`2 serializationInfoCache)
   at MongoDB.Driver.Linq.Utils.BsonSerializationInfoHelper.GetSerializationInfo(Expression node)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(BinaryExpression binaryExpression)
   at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression)
   at MongoDB.Driver.Linq.SelectQuery.BuildQuery()
   at MongoDB.Driver.Linq.SelectQuery.Execute()
   at MongoDB.Driver.Linq.MongoQueryProvider.Execute(Expression expression)
   at MongoDB.Driver.Linq.MongoQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)

我第一次没有将枚举分配给整数,这产生了相同的结果。我在两台不同的机器上看到了这个,两个全新安装的 MongoDb,一个在 Windows 上,一个在 Ubuntu 12.04 上。

不知道该怎么办,有什么想法吗?

【问题讨论】:

    标签: mongodb enums mongodb-.net-driver


    【解决方案1】:

    我最终做了

    Database.GetCollection&lt;IJob&gt;("Jobs").AsQueryable().ToEnumerable().FirstOrDefault(x=&gt;x.Status == JobStatus.Created);

    它工作得很好,虽然我有点担心它可能会在那时把所有数据都拉下来。不过它看起来并没有变慢,而且我曾经有超过 50k 的记录,如果发生这种情况,您会认为您会看到性能下降。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2019-05-31
      • 2015-07-26
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多