如何以 MongoDB.BsonSerializer 能够理解的方式在 C# 中为字符串 属性 的代码完成定义可用值?

How can I define available values for code completion of a string property in C# in a way that MongoDB.BsonSerializer will understand?

主要目的是在设置 属性 时显示智能感知。如果我可以通过如下图所示的属性来完成,那就太好了。

属性 应保留为字符串(不是枚举或结构),以便 Mongo 的 BsonSerializer 可以正确序列化它。这是它可能看起来像的示例:

为了帮助团队中的其他开发人员了解他们可以用于类型字段的可能(但不是唯一)值,代码完成应该显示可以如下所示使用的值:

(已编辑)我能够通过创建自己的类型来解决这个问题

public class SkinType:StringType<SkinType>
{
    public SkinType(string value)
    {
        Value = value;
    }
    public SkinType()
    {

    }
    public static implicit operator string(SkinType d)
    {
        return d.Value;

    }
    public static implicit operator SkinType(string d)
    {
        return  new SkinType(d);
    }

    public const string StringValue = nameof(StringValue);
    public const string Color = nameof(Color);
}

现在我的类型 属性 有了智能感知并且 Mongo 知道如何序列化它。

以下是我的使用方法:

    public class Skin : ServiceMongoIdentity
{

     //removed some properties for brevity.
    [BsonIgnoreIfDefault]
    [BsonDefaultValue(SkinType.StringValue)]
    public SkinType Type { get; set; } = SkinType.StringValue;

}

下面是 StringType 基础 class 的定义方式。我必须制作 Value public 因为泛型不能有带参数的构造函数

 public abstract  class StringType<T> where T :StringType<T>,new()
{
    [ReadOnly(true)]
    public string Value;
    public T FromString(string d)
    {
        return  new T
        {
            Value = d
        };

    }
    public override bool Equals(object obj)
    {
        return obj?.ToString() == Value;

    }

    public override int GetHashCode()
    {

        return Value.GetHashCode();
    }

    public override string ToString()
    {

        return Value;
    }

}