如果满足特定条件,是否可以通过编程/动态方式忽略参考映射?
考虑以下结构
public class SkuDto
{
public string Name;
public InnerSkuDto InnerSku;
}
public class InnerSkuDto
{
public Guid SkuNumber;
}
public sealed class SkuMap : ClassMap<SkuDto>
{
Map(m => m.Name);
References<InnerSkuMap>(m => m.InnerSku);
}
public sealed class InnerSkuMap : ClassMap<InnerSkuDto> { ... }
现在,InnerSku
对象中的SkuDto
属性有时可以为null,在这种情况下,结果CSV输出包含SkuNumber
的00000000-0000-0000-0000-0000-000000000000而不是空单元格。这样是否可以忽略InnerSku
如果它为null?
答案 0 :(得分:1)
Guid
不能为null,因此默认为空Guid
,您可以在CSV输出中看到。一种解决方案是将SkuNumber
更改为可为空的Guid
public class InnerSkuDto
{
public Guid? SkuNumber;
}
如果您不能或不想将SkuNumber
更改为可为空的Guid
,则另一个选择是使用自定义转换器。在这里,我重写了ConvertToString
的{{1}}方法。
GuidConverter
或者可以为所有public class EmptyGuidConverter : GuidConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if ((Guid)value == Guid.Empty)
{
return string.Empty;
}
return base.ConvertToString(value, row, memberMapData);
}
}
public sealed class InnerSkuMap : ClassMap<InnerSkuDto>
{
public InnerSkuMap()
{
Map(m => m.SkuNumber).TypeConverter<EmptyGuidConverter>();
}
}
值向CsvWriter
注册转换器,而不是为单个属性注册转换器。只需确保在注册Guid
之前添加它即可。
ClassMap