我正在尝试将
为了简单起见,我在WinForms按钮的单击事件中使用的代码如下所示。一旦它能正常工作,我就会进行重构:
包装类:
IEnumerable<FileInfo>
序列化为xml。我已经研究过并发现,因为FileInfo类没有无参数构造函数,所以它不能像原样被序列化,我应该使用一个包装类。为了简单起见,我在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
}
我想将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);
}
}
问题
我在以下代码行遇到了异常:new XmlSerializer(typeof(FileInfoSerializable)).Serialize(stream, filelist);
我已经尝试将其强制转换为通用列表,使用filelist.filez
代替filelist
,但仍然出现相同的错误。我需要改变什么才能使其正常工作?
谢谢
XmlSerializer(typeof(FileInfoSerializable)).Serialize(stream, filelist);
改为XmlSerializer(typeof(FileList)).Serialize(stream, filelist);
。 - Baldrick