包含字段为null时,枚举反序列化失败

时间:2019-06-05 15:13:29

标签: c# mongodb enums

我将MongoDB v4.0与C#驱动程序v2.8.1结合使用,并且正在从传统API升级到新API。

我有一个集合,其中的数据结构在嵌套字段内包括一个枚举。

当我查询此集合并且某些文档为空时,出现异常:

FormatException: Cannot deserialize a 'Orientations' from BsonType 'Null'.

我尝试在查询中添加空检查,但是导致错误:

"Command aggregate failed: The $cond accumulator is a unary operator." 

我正在使用Group Aggregate来获取按Name分组的所有数据,然后从每个组中获取First。

    C#: 
    collection.Aggregate().Group(r => r.Data.Name, r => new Info()
    {
      Name = r.First().RecipeData.Name,
      Status = r.First().RecipeData.Status,
      Orientation = r.First().Data.Info != null ? r.First().Data.Info.Orientation : Orientations.Down,
    }

    Command:    
    {{ "aggregate" : "Element", "pipeline" : [{ "$match" : { } }, { 
    "$group" : { "_id" : "$Data.Name", "Name" : { "$first" : "$Data.Name" }, 
    "Status" : { "$first" : "$Data.Status" }, 
    "Orientation" : { "$cond" : [{ "$ne" : [{ "$first" : "$Data.Info" }, null] }, { "$first" : "$Data.Info.Orientation" }, 270] } } }], 
    "cursor" : { } 
    }}

我也尝试注册一个自定义序列化程序,但是由于某种原因,它可用于其他枚举,并忽略此数据结构中的枚举,尽管此结构没有什么不同。

编辑:现在,将我的自定义序列化程序移动到我的类构造函数后,它可以工作。我以为它早到了,但是由于某种原因,它没有为此特定类型注册。

我仍然想知道如何使查询与null检查一起使用,以防将来我需要将其用于其他用途。

0 个答案:

没有答案
相关问题