如何以 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;
}
}
主要目的是在设置 属性 时显示智能感知。如果我可以通过如下图所示的属性来完成,那就太好了。
属性 应保留为字符串(不是枚举或结构),以便 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;
}
}