MongoDb C# 驱动程序 - 将 List<enum> 序列化为 string[]

A. *_*esa 2 c# enums serialization mongodb

我有一个属性类型为 的类List<SomeEnum>。像这样的东西:

public enum MyEnum
{
  A,
  B
}

public class MyClass
{
    public string Id { get; set; }
    public List<MyEnum> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经在EnumRepresentationConvention以这种方式使用:

ConventionRegistry.Register("EnumStringConvention", new ConventionPack { new EnumRepresentationConvention(BsonType.String) }, t => true);
Run Code Online (Sandbox Code Playgroud)

尽管如此,该Values属性仍被序列化为一个整数数组(简单的枚举属性被正确地处理为整数)。似乎在列表序列化的上下文中不使用该约定。

如何强制序列化程序写入字符串而不是整数?

der*_*kat 5

在 MyClass的属性中ConventionRegistry.Register()添加数据注释[BsonRepresentation(BsonType.String)],而不是调用Values

public class MyClass
{
    public string Id { get; set; }

    [BsonRepresentation(BsonType.String)] 
    public List<MyEnum> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在此更改之后collection.InsertOne(obj);保存:

{
    "_id" : "1",
    "Values" : [ 
        "A", 
        "B"
    ]
}
Run Code Online (Sandbox Code Playgroud)