旧类具有枚举类型的属性。然后Mongo将其存储为Int32。
public Enums.DStatus Status {get;set;}
该属性已更改为字符串
public string Status { get; set; }
现在,当从Mongo检索具有该属性的对象时,出现错误:
无法从BsonType'Int32'反序列化'String'。 --->
我认为我的解决方案可以编写一个自定义反序列化器,当该特定属性的值为“ Int32”时,它将将该特定属性转换为其枚举字符串值。而且我认为我可以保留默认的序列化程序。
我在想这样的事情:
public class DStatusSerializer : SerializerBase<string>
{
public override string Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var type = context.Reader.GetCurrentBsonType();
if (type == BsonType.Int32)
{
int i = context.Reader.ReadInt32();
string s = ((Enums.DStatus)i).ToString();
return s;
}
else if (type == BsonType.String)
{
return context.Reader.ReadString();
}
else
{
throw new Exception("Incorrect data type: " + type.ToString());
}
}
public override void Serialize(BsonSerializationContext context,
BsonSerializationArgs args, string value)
{
if (value != null)
{
context.Writer.WriteString(value.ToString());
}
else
{
context.Writer.WriteNull();
}
}
public override void Serialize(BsonSerializationContext context,
BsonSerializationArgs args, string value)
{
if (value != null)
{
context.Writer.WriteString(value.ToString());
}
else
{
context.Writer.WriteNull();
}
}
}
,然后将该属性添加到class属性:
[BsonSerializer(typeof(DStatusSerializer))]
public string Status { get; set; }
但不确定这是否是一种好方法。