IEnumerable<FileInfo>
をxmlにシリアル化しようとしています。私は研究してFileInfoクラスは、パラメータのないコンストラクタを持っていないため、それがそのままシリアル化することはできません、私はラッパークラスを使用する必要がありますが見つかりました。C言語でFileInfoオブジェクトをXMLにシリアライズ
簡単にするために、シリアル化するために使用するコードは、図のようにwinformsボタンのクリックイベントにあります。その作業に一度病気リファクタリングこれを:
private void button1_Click(object sender, System.EventArgs e)
{
IEnumerable<FileInfo> allfiles = FileGetter.FileInfoAllFiles();
FileList filelist = new FileList();
foreach (var file in allfiles)
{
filelist.Add(new FileInfoSerializable(file));
}
var stream = new FileStream("Xmllist.xml", FileMode.Create);
new XmlSerializer(typeof(FileInfoSerializable)).Serialize(stream, filelist);
}
ラッパークラス:
[Serializable]
public class FileInfoSerializable
{
private readonly FileInfo _fileInfo;
#region ~~~ Constructors ~~~
public FileInfoSerializable() { }
public FileInfoSerializable(FileInfo FileInfo) { _fileInfo = FileInfo; }
#endregion
#region ~~~ Properties ~~~
public string Name { get { return _fileInfo.Name; } set { } }
public string FullName { get { return _fileInfo.FullName; } set { } }
public long Length { get { return _fileInfo.Length; } set { } }
public string Extension { get { return _fileInfo.Extension; } set { } }
public DateTime LastWriteTime { get { return _fileInfo.LastWriteTime; } set { } }
public string DirectoryName { get { return _fileInfo.DirectoryName; } set { } }
#endregion
}
私はその後、serialize.ThisがクラスであるだろうコレクションにIEnumerable<FileInfo>
内の各FileInfoオブジェクトを追加したいです
[Serializable]
public class FileList
{
public List<FileInfoSerializable> filez { get; set; }
public FileList()
{
filez = new List<FileInfoSerializable>();
}
public void Add(FileInfoSerializable m)
{
filez.Add(m);
}
}
PROBLEM
:コレクションを保持していますラインで次の例外を取得イム:new XmlSerializer(typeof(FileInfoSerializable)).Serialize(stream, filelist);
私は、ファイルリストの代わりにfilelist.filezを使用して、まだ同じエラーを取得し、一般的なリストにキャストしようとしています。この仕事をするために私は何を変える必要がありますか?
歓声
'XmlSerializerを(typeof演算(FileInfoSerializable))シリアル化(ストリーム、ファイルリスト);。。' 'のXmlSerializer(typeof演算(ファイルリスト))でなければなりませんシリアル化(ストリーム、ファイルリスト);' – Baldrick
は、なぜこれらのオブジェクトをシリアル化したいです?シリアライズ後にシリアライズされたデータを使って何をするつもりですか? –
@Baldrickそれがうまくいった! :)それは私が逃したものでした。ありがとうございました ! – Nick