设置 MongoDb 以将 属性 更改为大写
Setting MongoDb to change a property to UpperCase
我有以下 poco(为简单起见省略了其他属性):
public class Address
{
. . .
public string CountryCode { get; set; }
. . .
}
我必须在 BsonClassMap
中做什么才能为此 属性 强制使用大写。
例如“us”将作为“US”存储在数据库中
BsonClassMap.RegisterClassMap<Address>(cm =>
{
// what am I missing here ?
});
还是我处理方法不对?
检查这个:
SetElementName
方式:
BsonClassMap.RegisterClassMap<Address>(cm =>
{
cm.MapField(e => e.CountryCode).SetElementName("COUNTRY_CODE");
});
var address = new Address();
var bson = address.ToBsonDocument();
// bson: { "COUNTRY_CODE" : null }
BsonElement
属性方式:
public class Address
{
[BsonElement("COUNTRY_CODE")]
public string CountryCode { get; set; }
}
这是一个自定义序列化程序属性,您可以使用以下内容修饰国家/地区代码 属性:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class UpperCaseAttribute : BsonSerializerAttribute
{
public UpperCaseAttribute() : base(typeof(UpperCaseSerializer)) { }
private class UpperCaseSerializer : SerializerBase<string>
{
public override void Serialize(BsonSerializationContext ctx, BsonSerializationArgs args, string value)
{
if (value is null)
ctx.Writer.WriteNull();
else
ctx.Writer.WriteString(value.ToUpper());
}
public override string Deserialize(BsonDeserializationContext ctx, BsonDeserializationArgs args)
{
switch (ctx.Reader.CurrentBsonType)
{
case BsonType.String:
return ctx.Reader.ReadString();
case BsonType.Null:
ctx.Reader.ReadNull();
return null;
default:
throw new BsonSerializationException($"'{ctx.Reader.CurrentBsonType}' values are not valid on properties decorated with an [UpperCase] attribute!");
}
}
}
用法:
public class Address
{
[UpperCase]
public string CountryCode { get; set; }
}
我有以下 poco(为简单起见省略了其他属性):
public class Address
{
. . .
public string CountryCode { get; set; }
. . .
}
我必须在 BsonClassMap
中做什么才能为此 属性 强制使用大写。
例如“us”将作为“US”存储在数据库中
BsonClassMap.RegisterClassMap<Address>(cm =>
{
// what am I missing here ?
});
还是我处理方法不对?
检查这个:
SetElementName
方式:BsonClassMap.RegisterClassMap<Address>(cm => { cm.MapField(e => e.CountryCode).SetElementName("COUNTRY_CODE"); }); var address = new Address(); var bson = address.ToBsonDocument(); // bson: { "COUNTRY_CODE" : null }
BsonElement
属性方式:public class Address { [BsonElement("COUNTRY_CODE")] public string CountryCode { get; set; } }
这是一个自定义序列化程序属性,您可以使用以下内容修饰国家/地区代码 属性:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class UpperCaseAttribute : BsonSerializerAttribute
{
public UpperCaseAttribute() : base(typeof(UpperCaseSerializer)) { }
private class UpperCaseSerializer : SerializerBase<string>
{
public override void Serialize(BsonSerializationContext ctx, BsonSerializationArgs args, string value)
{
if (value is null)
ctx.Writer.WriteNull();
else
ctx.Writer.WriteString(value.ToUpper());
}
public override string Deserialize(BsonDeserializationContext ctx, BsonDeserializationArgs args)
{
switch (ctx.Reader.CurrentBsonType)
{
case BsonType.String:
return ctx.Reader.ReadString();
case BsonType.Null:
ctx.Reader.ReadNull();
return null;
default:
throw new BsonSerializationException($"'{ctx.Reader.CurrentBsonType}' values are not valid on properties decorated with an [UpperCase] attribute!");
}
}
}
用法:
public class Address
{
[UpperCase]
public string CountryCode { get; set; }
}