写一个CSV文件

时间:2012-04-18 16:20:24

标签: c# .net filehelpers

我有一个用C#编写并用FileHelpers属性

编写的类
[DelimitedRecord(","), IgnoreFirst(1)]
class UserAndValues
{
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public ICollection<UserFavourites> Favourites {get;set;}

    public UserAndValues()
    { }
}

class UserFavourites
{
    public int Id {get;set;}
    public string Title {get;set;}
}

然后我调用CSV编写器

var engine = new FileHelperEngine<UserAndValues>();
engine.WriteFile(myPath, myListOfUsers);

我收到以下错误:

  

字段:'k__BackingField'的类型为:ICollection`1   这不是系统类型,因此该字段需要CustomConverter(   请查看文档以获取更多信息。)

我想写出一个基本上看起来像

的文件
UserId, FirstName, LastName, Favourite1Id, Favourite1Title, Favourite2Id, Favourite2Title...  
1, Joe, Smith, 1, Random Title, 2, More Title, ...

收藏夹集合可能是10-50条记录深度,并根据文件进行更改。

我不需要读这个文件,只需写下来。

如何使用上述类生成CSV? (我可以修改类结构)

1 个答案:

答案 0 :(得分:2)

嗯,非常未经测试:

class UserAndValues
{
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [FieldConverter(typeof(MyListConverter))] 
    public ICollection<UserFavourites> Favourites {get;set;}
}

public class MyListConverter: ConverterBase 
{ 

    public override object StringToField(string from) 
    { 
      throw new NotImplemented("bad luck");
    } 

    public override string FieldToString(object fieldValue) 
    { 
       var list = fieldValue as ICollection<UserFavourites>;

        return string.Join(",", 
            list.Select(f => f.ToString()));   // customize
    }

}