C# 使用FileHelpers导出嵌套集合 [分隔符记录(“,”)] 公共类样本类型 { 公共字符串字段1; 公共国际领域2; 公共IEnumerable集合{get;set;} } [分隔符记录(“|”) 公营儿童班 { 公共字符串值{get;set;} }
我想使用FileHelpers将样本类型列表转换为CSV格式。如何让它在SampleType的每个实例中输出内部“集合” 所以一行输出看起来像这样 “字段1值”、“7”、“值1 |值2 |值3”C# 使用FileHelpers导出嵌套集合 [分隔符记录(“,”)] 公共类样本类型 { 公共字符串字段1; 公共国际领域2; 公共IEnumerable集合{get;set;} } [分隔符记录(“|”) 公营儿童班 { 公共字符串值{get;set;} },c#,export-to-csv,filehelpers,C#,Export To Csv,Filehelpers,我想使用FileHelpers将样本类型列表转换为CSV格式。如何让它在SampleType的每个实例中输出内部“集合” 所以一行输出看起来像这样 “字段1值”、“7”、“值1 |值2 |值3” 在类中定义新的只读属性,如下所示: [DelimitedRecord(",")] public class SampleType { public string Field1; public int Field2; public IEnumerable<ChildClas
在类中定义新的只读属性,如下所示:
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
}
[DelimitedRecord("|")]
public class ChildClass
{
public string Value { get; set; }
}
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
public string CollectionValues
{
get
{
string.Join("|", this.Collection.Select(c => c.Value));
}
}
}
public class MyCustomConverter : ConverterBase
{
public override object StringToField(string from)
{
return from.Split('|').Select(s => new ChildClass { Value = s });
}
public override string FieldToString(object fieldValue)
{
IEnumerable<ChildClass> collection = (IEnumerable<ChildClass>)fieldValue;
return string.Join("|", collection.Select(c => c.Value));
}
}
[分隔符记录(“,”)]
公共类样本类型
{
公共字符串字段1;
公共国际领域2;
公共IEnumerable集合{get;set;}
公共字符串集合值
{
得到
{
string.Join(“|”),this.Collection.Select(c=>c.Value));
}
}
}
我从未使用过FileHelper,但我认为您应该能够导出包含Field1、Field2和CollectionValue的CSV文件
更新:
查看FileHelpers的文档,FileHelpers针对这种情况的解决方案似乎是使用自定义FieldConverter。您可以这样定义自定义转换器:
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
}
[DelimitedRecord("|")]
public class ChildClass
{
public string Value { get; set; }
}
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
public string CollectionValues
{
get
{
string.Join("|", this.Collection.Select(c => c.Value));
}
}
}
public class MyCustomConverter : ConverterBase
{
public override object StringToField(string from)
{
return from.Split('|').Select(s => new ChildClass { Value = s });
}
public override string FieldToString(object fieldValue)
{
IEnumerable<ChildClass> collection = (IEnumerable<ChildClass>)fieldValue;
return string.Join("|", collection.Select(c => c.Value));
}
}
公共类MyCustomConverter:ConverterBase
{
公共覆盖对象StringToField(字符串来自)
{
从.Split(“|”)返回。选择(s=>newchildclass{Value=s});
}
公共重写字符串FieldToString(对象fieldValue)
{
IEnumerable集合=(IEnumerable)字段值;
返回string.Join(“|”),collection.Select(c=>c.Value));
}
}
然后,你可以像这样在课堂上使用它:
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
}
[DelimitedRecord("|")]
public class ChildClass
{
public string Value { get; set; }
}
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
public IEnumerable<ChildClass> Collection { get; set; }
public string CollectionValues
{
get
{
string.Join("|", this.Collection.Select(c => c.Value));
}
}
}
public class MyCustomConverter : ConverterBase
{
public override object StringToField(string from)
{
return from.Split('|').Select(s => new ChildClass { Value = s });
}
public override string FieldToString(object fieldValue)
{
IEnumerable<ChildClass> collection = (IEnumerable<ChildClass>)fieldValue;
return string.Join("|", collection.Select(c => c.Value));
}
}
[分隔符记录(“,”)]
公共类样本类型
{
公共字符串字段1;
公共国际领域2;
[FieldConverter(类型(MyCustomConverter))]
公共IEnumerable集合{get;set;}
}
您需要决定并解释如何在CSV文件中表示子类。你想让你的CSV文件像Field1,Field2,Child1,Child2,…
?我希望文件助手能更自然地处理这个问题。我试过了,但自定义转换器不能处理集合。现在我只是想做一些你最初建议的事情。