从 mongo 数据库中映射不同的案例

Map different cases out of mongo database

我有一个 mongo 数据集,其中包含 属性 名称大小写不同的对象。例如

{
"prop1": "value1",
"prop2": "value2"
},
{
"Prop1": "value3",
"proP2": "value4"
},
{
"PROP1": "value5",
"ProP2": "value6"
}

有什么方法可以将其映射到我的class。

public class MyClass
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

我知道您可以使用 BsonDiscriminator 属性来指定特定的大小写,但我能以某种方式处理多个大小写吗?

您可以使用 ISupportInitializeBsonExtraElements 来实现它,如下所示:

public class MyClass : ISupportInitialize
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }

    [BsonExtraElements]
    public IDictionary<string, object> Extras { get; set; }
        = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

    public void BeginInit() { } //nothing to do here

    public void EndInit()
    {
        foreach (var prop in typeof(MyClass).GetProperties())
        {
            if (Extras.Remove(prop.Name, out var value))
            {
                prop.SetValue(this, value);
            }
        }
    }
}

理想情况下,您应该 运行 数据库迁移以将所有字段名称重命名为相同。否则您将无法正确查询数据。即,与您的 poco 不匹配的外壳属性将不会匹配。