有条件地忽略引用映射
Conditionally Ignore reference mapping
是否可以programatically/dynamically忽略满足特定条件的引用映射?
考虑以下结构
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> { ... }
现在有时 SkuDto
对象中的 InnerSku
属性 可以为空,在这种情况下,生成的 CSV 输出包含 00000000-0000-0000-0000-000000000000 SkuNumber
而不是空单元格。那么是否可以忽略 InnerSku
如果它为空?
A Guid
不能为空,因此它默认为空 Guid
,您会在 CSV 输出中看到这一点。一种解决方案是将 SkuNumber
更改为可为空的 Guid
public class InnerSkuDto
{
public Guid? SkuNumber;
}
如果您不能或不想将 SkuNumber
更改为可为 null 的 Guid
,另一种选择是使用自定义转换器。这里我重写了GuidConverter
.
的ConvertToString
方法
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>();
}
}
或者不是为单个 属性 注册转换器,您可以为所有 Guid
值使用 CsvWriter
注册它。只需确保在注册您的 ClassMap
.
之前添加它
csv.Configuration.TypeConverterCache.AddConverter<Guid>(new EmptyGuidConverter());
是否可以programatically/dynamically忽略满足特定条件的引用映射?
考虑以下结构
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> { ... }
现在有时 SkuDto
对象中的 InnerSku
属性 可以为空,在这种情况下,生成的 CSV 输出包含 00000000-0000-0000-0000-000000000000 SkuNumber
而不是空单元格。那么是否可以忽略 InnerSku
如果它为空?
A Guid
不能为空,因此它默认为空 Guid
,您会在 CSV 输出中看到这一点。一种解决方案是将 SkuNumber
更改为可为空的 Guid
public class InnerSkuDto
{
public Guid? SkuNumber;
}
如果您不能或不想将 SkuNumber
更改为可为 null 的 Guid
,另一种选择是使用自定义转换器。这里我重写了GuidConverter
.
ConvertToString
方法
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>();
}
}
或者不是为单个 属性 注册转换器,您可以为所有 Guid
值使用 CsvWriter
注册它。只需确保在注册您的 ClassMap
.
csv.Configuration.TypeConverterCache.AddConverter<Guid>(new EmptyGuidConverter());