2

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を生成するにはどうすればよいですか?(クラス構造を変更できます)

4

1 に答える 1

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
    }

}
于 2012-04-18T16:36:49.690 に答える