2012-04-18 81 views
2

我有,我已经用C#编写,并饰以FileHelpers类属性写一个CSV文件

[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); 

我收到以下错误:

The field: 'k__BackingField' has the type: ICollection`1 that is not a system type, so this field need a CustomConverter ( Please Check the docs for more Info).

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

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

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

我不需要阅读这个文件,只需要编写它。

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

+0

帮助页列出了[FieldConverter]一个转换器实例,你尝试了吗? – 2012-04-18 16:28:45

+0

我确实看过,但我没有看到类似于我的问题的任何示例 – 2012-04-18 16:31:10

回答

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 
    } 

} 
+0

这很好!我必须从我的所有属性中删除{get; set;},以便[FieldConvert]属性正常工作,但除此之外,它的功能就像一个魅力 – 2012-04-18 16:45:39