C# 设置MongoDb以将属性更改为大写
为了简单起见,我省略了以下poco其他属性: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 => {
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; }
}