gpt4 book ai didi

c# - 当 C# 端没有等效值时,我们如何处理 Enum 的反序列化错误?

转载 作者:行者123 更新时间:2023-12-04 07:35:30 26 4
gpt4 key购买 nike

在我的 C# 代码中,我有一个枚举类型,它将作为字符串存储在 MongoDB 中。在我的 C# 代码中,我有这种类型:

public enum Color
{
Unknown =0,
Red =1,
Blue =2,
Brown =3,
}
当 MongoDB 中的字符串值为红色、蓝色或棕色时,没有问题,但有时在 DB 中,我的枚举类型中不包含其他颜色,如黑色,在这种情况下,我希望颜色反序列化为未知,但出现反序列化错误表示未定义黑色。有没有办法处理这个?我无法在我身边添加所有颜色,也无法将枚举类型更改为任何其他类型。我想知道如何将其反序列化为未知?

最佳答案

您将需要一个像这样的自定义序列化程序:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com