ReadBsonType只能在State为Type时调用,而不能在State为Value时调用

nie*_*eve 5 c# mongodb deserialization

我们需要将一些字符串格式的数据移动到枚举中,因为现有的数据与我们想要的enum看起来不一致,所以我使用的是自定义的Serializer(在MongoDB中).

我的代码看起来像这样:

public override MyEnum Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
    if (context.Reader.CurrentBsonType == MongoDB.Bson.BsonType.Null) return MyEnum.Unknown;
    return ParseMyEnum(context.Reader.ReadString());
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我从数据库中获取包含MyEnum的类时,我都会得到上面提到的异常.

nie*_*eve 6

答案很简单:我们之所以得到这个异常,只是因为我们在没有实际读取值的情况下返回MyEnum.Unknown.然后修复:

if (context.Reader.CurrentBsonType == MongoDB.Bson.BsonType.Null) {
    context.Reader.ReadNull();
    return MyEnum.Unknown;
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.

  • 根据记录,当调用 Serialize 并返回而不写入值时,也会发生这种情况。 (3认同)