【发布时间】:2022-01-24 01:35:57
【问题描述】:
我正在使用 MongoDB,我需要创建一个可以作为 provider 注入的序列化程序,而无需使用 BsonSerializerAttribute 装饰类。
我像这样注册为提供者:
BsonSerializer.RegisterSerializer(typeof(SexType), new SexTypeSerializer());
我总是得到一个异常,因为 对象值 在这个方法中总是为空。
我该如何解决这个问题?
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
这是我实现的类。
public class SexTypeSerializer : IBsonSerializer<SexType>
{
public Type ValueType
{
get { return typeof(SexType); }
}
public SexTypeSerializer() { }
public SexType Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var value = context.Reader.ReadString();
return SexType.FromCode(value);
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, SexType value)
{
BsonSerializer.Serialize(context.Writer, value.Code);
}
object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return SexType.FromCode(BsonSerializer.Deserialize<string>(context.Reader));
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
if (value is SexType sexType)
{
BsonSerializer.Serialize(context.Writer, sexType.Code);
}
else
{
throw new NotSupportedException($"This is not an {nameof(SexType)}");
}
}
}
【问题讨论】:
标签: mongodb .net-core serialization deserialization