gpt4 book ai didi

c# - 在 C# 中将 FileInfo 对象序列化为 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:52 24 4
gpt4 key购买 nike

我正在尝试序列化 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);

enter image description here

我尝试转换为通用列表,使用 filelist.filez 代替 filelist,但仍然出现相同的错误。我需要更改什么才能使这项工作正常进行?

干杯

最佳答案

我终于找到问题了。 typeof(FileInfoSerializable) 应该是 typeof(FileList)。下面的代码有效。 FileInfoSerializable 在 xml 的根级别创建一个数组。 xml 的根必须是单数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication49
{
class Program
{

static void Main(string[] args)
{
List<FileInfo> allfiles = Directory.GetFiles(@"c:\temp").Select(x => new FileInfo(x)).ToList();

FileList filelist = new FileList();

foreach (var file in allfiles)
{
filelist.Add(new FileInfoSerializable(file));
}

var stream = new FileStream("c:\\temp\\Xmllist.xml", FileMode.Create);

XmlSerializer serializer = new XmlSerializer(typeof(FileList));

serializer.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
}

[Serializable]
public class FileList
{
public List<FileInfoSerializable> filez { get; set; }

public FileList()
{
filez = new List<FileInfoSerializable>();
}

public void Add(FileInfoSerializable m)
{
filez.Add(m);
}
}
}

关于c# - 在 C# 中将 FileInfo 对象序列化为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com