C# 设置MongoDb以将属性更改为大写

C# 设置MongoDb以将属性更改为大写,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,为了简单起见,我省略了以下poco其他属性: public class Address { . . . public string CountryCode { get; set; } . . . } 我必须在BsonClassMap中执行什么操作才能对此属性强制使用大写。 例如,us将作为us存储在db中 BsonClassMap.RegisterClassMap<Address>(cm => {

为了简单起见,我省略了以下poco其他属性:

public class Address
{
   . . .    
  public string CountryCode { get; set; }
   . . .
} 
我必须在BsonClassMap中执行什么操作才能对此属性强制使用大写。 例如,us将作为us存储在db中

BsonClassMap.RegisterClassMap<Address>(cm =>
            {
               // what am I missing here ?
            });
还是我走错了路?

检查一下:

SetElementName方式:

选中此项:

SetElementName方式:


以下是一个自定义序列化程序属性,您可以使用它装饰country code属性:

[AttributeUsageAttributeTargets.Property,AllowMultiple=false] 公共类大写属性:BsonSerializerAttribute { 公共UpperCaseAttribute:basetypeofUpperCaseSerializer{} 私有类UpperCaseSerializer:SerializerBase { public override void SerializeBsonSerializationContext ctx,BsonSerializationArgs args args,字符串值 { 如果值为空 ctx.Writer.WriteNull; 其他的 ctx.Writer.WriteStringvalue.ToUpper; } 公共重写字符串反序列化DSONDeserializationContext ctx,BsonDeserializationArgs args args { 开关ctx.Reader.CurrentBsonType { case BsonType.String: 返回ctx.Reader.ReadString; 案例BsonType.Null: ctx.Reader.ReadNull; 返回null; 违约: 抛出新的BsonSerializationException$'{ctx.Reader.CurrentBsonType}'值在用[UpperCase]属性修饰的属性上无效!; } } } 用法:

公共课堂演讲 { [大写] 公共字符串CountryCode{get;set;} }
以下是一个自定义序列化程序属性,您可以使用它装饰country code属性:

[AttributeUsageAttributeTargets.Property,AllowMultiple=false] 公共类大写属性:BsonSerializerAttribute { 公共UpperCaseAttribute:basetypeofUpperCaseSerializer{} 私有类UpperCaseSerializer:SerializerBase { public override void SerializeBsonSerializationContext ctx,BsonSerializationArgs args args,字符串值 { 如果值为空 ctx.Writer.WriteNull; 其他的 ctx.Writer.WriteStringvalue.ToUpper; } 公共重写字符串反序列化DSONDeserializationContext ctx,BsonDeserializationArgs args args { 开关ctx.Reader.CurrentBsonType { case BsonType.String: 返回ctx.Reader.ReadString; 案例BsonType.Null: ctx.Reader.ReadNull; 返回null; 违约: 抛出新的BsonSerializationException$'{ctx.Reader.CurrentBsonType}'值在用[UpperCase]属性修饰的属性上无效!; } } } 用法:

公共课堂演讲 { [大写] 公共字符串CountryCode{get;set;} }
谢谢你回答dododo。我想这个问题有点误导,我已经更新了。我正在寻找如何将国家代码的值转换为大写,并将其存储在db中,而不是属性名。idk一种解决方法不确定这是否可行,您始终可以实现此逻辑的自定义序列化程序:谢谢您回答dododo。I我猜这个问题有点误导,我已经更新了它。我在寻找如何将国家代码的值转换为大写,并将其存储在db中,而不是属性名。idk一种方法对此不确定是否可行,您可以始终为此逻辑实现自定义序列化程序:谢谢!我认为自定义序列化程序是一种方法!谢谢!我认为这是一种方法墨迹自定义序列化是一种方式!
BsonClassMap.RegisterClassMap<Address>(cm =>
{
    cm.MapField(e => e.CountryCode).SetElementName("COUNTRY_CODE");
});
var address = new Address();
var bson = address.ToBsonDocument();  
// bson: { "COUNTRY_CODE" : null }
public class Address
{
    [BsonElement("COUNTRY_CODE")]
    public string CountryCode { get; set; }
}