Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用FileHelpers导出嵌套集合 [分隔符记录(“,”)] 公共类样本类型 { 公共字符串字段1; 公共国际领域2; 公共IEnumerable集合{get;set;} } [分隔符记录(“|”) 公营儿童班 { 公共字符串值{get;set;} }_C#_Export To Csv_Filehelpers - Fatal编程技术网

C# 使用FileHelpers导出嵌套集合 [分隔符记录(“,”)] 公共类样本类型 { 公共字符串字段1; 公共国际领域2; 公共IEnumerable集合{get;set;} } [分隔符记录(“|”) 公营儿童班 { 公共字符串值{get;set;} }

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

我想使用FileHelpers将样本类型列表转换为CSV格式。如何让它在SampleType的每个实例中输出内部“集合”

所以一行输出看起来像这样

“字段1值”、“7”、“值1 |值2 |值3”


在类中定义新的只读属性,如下所示:

[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,…
?我希望文件助手能更自然地处理这个问题。我试过了,但自定义转换器不能处理集合。现在我只是想做一些你最初建议的事情。