从 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 属性来指定特定的大小写,但我能以某种方式处理多个大小写吗?
您可以使用 ISupportInitialize
和 BsonExtraElements
来实现它,如下所示:
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 不匹配的外壳属性将不会匹配。
我有一个 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 属性来指定特定的大小写,但我能以某种方式处理多个大小写吗?
您可以使用 ISupportInitialize
和 BsonExtraElements
来实现它,如下所示:
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 不匹配的外壳属性将不会匹配。