在我的 C# 代码中,我有一个枚举类型,它将作为字符串存储在 MongoDB 中。在我的 C# 代码中,我有这种类型:
public enum Color
{
Unknown =0,
Red =1,
Blue =2,
Brown =3,
}
当 MongoDB 中的字符串值是红色、蓝色或棕色时,没有问题,但有时在数据库中,还有其他颜色未包含在我的枚举类型中,例如黑色,在这种情况下,我希望颜色反序列化为未知,但我反序列化错误表明黑色未定义。有什么办法可以处理这个问题吗?我无法添加我这边的每种颜色,也无法将枚举类型更改为任何其他类型。我想知道如何将其反序列化为 Unknown?
最佳答案
您将需要一个自定义序列化器,如下所示:
public class ColorSerializer : SerializerBase<Color>
{
public override void Serialize(BsonSerializationContext ctx, BsonSerializationArgs args, Color value)
{
ctx.Writer.WriteString(value.ToString());
}
public override Color Deserialize(BsonDeserializationContext ctx, BsonDeserializationArgs args)
{
return
ctx.Reader.CurrentBsonType switch
{
MongoDB.Bson.BsonType.String => ctx.Reader.ReadString() switch
{
"Red" => Color.Red,
"Blue" => Color.Blue,
"Brown" => Color.Brown,
_ => Color.Unknown,
},
_ => Color.Unknown,
};
}
}
在应用程序启动期间将其注册到序列化器注册表中,如下所示:
BsonSerializer.RegisterSerializer(typeof(Color), new ColorSerializer());
完成!
关于c# - 当 C# 端没有等效值时,我们如何处理 Enum 的反序列化错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67765655/