将外部 classes/variables 与自定义类型转换器一起使用
Using external classes/variables with CustomTypeConverter
我需要根据映射的 class' 参数将 double
字段转换为自定义 string
输出。这最容易用代码显示。
public enum Type {
Mod,
NonMod
}
public class Document {
public double Value { get; set; }
public Type DocType { get; set; }
}
现在正在尝试转换值字段...
public class DocumentMap : ClassMap<Document>
{
public DocumentMap
{
Map(m => m.Value).Index(0).Name("Value").TypeConverter<CustomDoubleConverter>()
Map(m => m.Type).Index(1).Name("Type");
}
private class CustomDoubleConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text == "ModVal" ? null : double.Parse(text);
}
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return (double)value == 0 /* && Document.Type == Type.Mod*/ ? "ModVal" : value.ToString();
}
}
}
我需要 CustomDoubleConverter
中的 Document
类型来为 Mod
类型的文档编写“ModVal” 仅。唯一的问题是将值 转换为 字符串,因为转换回来意味着它最初已被正确描述。我需要知道每个文档的文档类型,所以我不相信可以将参数传递到 DocumentMap
实例化中,因为它只实例化一次。
我不太确定我理解你的所有逻辑,但我认为 Convert
可以在 ClassMap
中为你工作。
public class DocumentMap : ClassMap<Document>
{
public DocumentMap()
{
Map(m => m.Value).Name("Value")
.Convert(args =>
{
var value = args.Row.GetField<string>(0);
return value == "ModVal" ? 0 : double.Parse(value);
}).Convert(args =>
{
return args.Value.Value == 0 && args.Value.DocType == Type.Mod ? "ModVal" : args.Value.Value.ToString();
});
Map(m => m.DocType).Index(1).Name("Type");
}
}
我需要根据映射的 class' 参数将 double
字段转换为自定义 string
输出。这最容易用代码显示。
public enum Type {
Mod,
NonMod
}
public class Document {
public double Value { get; set; }
public Type DocType { get; set; }
}
现在正在尝试转换值字段...
public class DocumentMap : ClassMap<Document>
{
public DocumentMap
{
Map(m => m.Value).Index(0).Name("Value").TypeConverter<CustomDoubleConverter>()
Map(m => m.Type).Index(1).Name("Type");
}
private class CustomDoubleConverter : DefaultTypeConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return text == "ModVal" ? null : double.Parse(text);
}
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return (double)value == 0 /* && Document.Type == Type.Mod*/ ? "ModVal" : value.ToString();
}
}
}
我需要 CustomDoubleConverter
中的 Document
类型来为 Mod
类型的文档编写“ModVal” 仅。唯一的问题是将值 转换为 字符串,因为转换回来意味着它最初已被正确描述。我需要知道每个文档的文档类型,所以我不相信可以将参数传递到 DocumentMap
实例化中,因为它只实例化一次。
我不太确定我理解你的所有逻辑,但我认为 Convert
可以在 ClassMap
中为你工作。
public class DocumentMap : ClassMap<Document>
{
public DocumentMap()
{
Map(m => m.Value).Name("Value")
.Convert(args =>
{
var value = args.Row.GetField<string>(0);
return value == "ModVal" ? 0 : double.Parse(value);
}).Convert(args =>
{
return args.Value.Value == 0 && args.Value.DocType == Type.Mod ? "ModVal" : args.Value.Value.ToString();
});
Map(m => m.DocType).Index(1).Name("Type");
}
}