C# 如何使用ignore()忽略类类型?

C# 如何使用ignore()忽略类类型?,c#,csvhelper,C#,Csvhelper,目标外汇:。净核心2 CsvHelper:6.0.0最新版本 个人CSV 人类 人像图 实际上,我想忽略的类类型有很多道具。所以我很想知道CsvHelper是否已经提供了忽略整个类型的Mapp=>p.Address.ignore的功能,我还不知道 我以前从未使用过这个库,所以请对此持保留态度: 它似乎将地址映射为引用映射,而不是字段映射。这很可能是一个bug,或者至少是一个意外的行为,因为忽略引用映射实际上没有任何作用。这可能值得报道。它可能会递归地忽略其中的所有字段映射 也就是说,有一个解决方

目标外汇:。净核心2 CsvHelper:6.0.0最新版本

个人CSV

人类

人像图

实际上,我想忽略的类类型有很多道具。所以我很想知道CsvHelper是否已经提供了忽略整个类型的Mapp=>p.Address.ignore的功能,我还不知道


我以前从未使用过这个库,所以请对此持保留态度:

它似乎将地址映射为引用映射,而不是字段映射。这很可能是一个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);
    }
}