C# 如何使用ignore()忽略类类型?
目标外汇:。净核心2 CsvHelper:6.0.0最新版本 个人CSV 人类 人像图 实际上,我想忽略的类类型有很多道具。所以我很想知道CsvHelper是否已经提供了忽略整个类型的Mapp=>p.Address.ignore的功能,我还不知道C# 如何使用ignore()忽略类类型?,c#,csvhelper,C#,Csvhelper,目标外汇:。净核心2 CsvHelper:6.0.0最新版本 个人CSV 人类 人像图 实际上,我想忽略的类类型有很多道具。所以我很想知道CsvHelper是否已经提供了忽略整个类型的Mapp=>p.Address.ignore的功能,我还不知道 我以前从未使用过这个库,所以请对此持保留态度: 它似乎将地址映射为引用映射,而不是字段映射。这很可能是一个bug,或者至少是一个意外的行为,因为忽略引用映射实际上没有任何作用。这可能值得报道。它可能会递归地忽略其中的所有字段映射 也就是说,有一个解决方
我以前从未使用过这个库,所以请对此持保留态度: 它似乎将地址映射为引用映射,而不是字段映射。这很可能是一个bug,或者至少是一个意外的行为,因为忽略引用映射实际上没有任何作用。这可能值得报道。它可能会递归地忽略其中的所有字段映射 也就是说,有一个解决方法:手动删除引用映射。您可以编写扩展名:
public static class Extensions
{
public static void RemoveReference<T, TT>(this ClassMap<T> classMap, Expression<Func<T, TT>> expr)
{
var memberExpr = expr.Body as MemberExpression;
var member = memberExpr.Member;
var referenceMapsToRemove = classMap.ReferenceMaps.Where(rm => rm.Data.Member == member).ToList();
foreach (var referenceMapToRemove in referenceMapsToRemove)
{
classMap.ReferenceMaps.Remove(referenceMapToRemove);
}
}
}
然后你的代码变成:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
AutoMap();
this.RemoveReference(p => p.Address);
}
}
如上所述,我对这个库不是很熟悉。您可能必须对此进行调整,以忽略引用映射中的所有字段映射,而不是直接删除它
public class PersonMap : ClassMap<Person> {
public PersonMap() {
AutoMap();
Map(p => p.Address).Ignore(); // This causes exception
}
}
Map(p => p.Address.AddLine1).Ignore();
Map(p => p.Address.AddLine2).Ignore();
public static class Extensions
{
public static void RemoveReference<T, TT>(this ClassMap<T> classMap, Expression<Func<T, TT>> expr)
{
var memberExpr = expr.Body as MemberExpression;
var member = memberExpr.Member;
var referenceMapsToRemove = classMap.ReferenceMaps.Where(rm => rm.Data.Member == member).ToList();
foreach (var referenceMapToRemove in referenceMapsToRemove)
{
classMap.ReferenceMaps.Remove(referenceMapToRemove);
}
}
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
AutoMap();
this.RemoveReference(p => p.Address);
}
}