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

时间:2017-04-19 18:29:05

标签: 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());
}

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

1 个答案:

答案 0 :(得分:6)

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

if (context.Reader.CurrentBsonType == MongoDB.Bson.BsonType.Null) {
    context.Reader.ReadNull();
    return MyEnum.Unknown;
}

希望这有助于某人。