我正在使用 C# 在 VS2022 中构建一个 MAUI 项目。 我正在尝试从 xml 文件加载数据:
<?xml version = "1.0" encoding = "UTF-8" ?>
<root>
<Event>
<ETitle>Norwegian Fjords Cruise</ETitle>
<EStartDate>03/05/2025 08:00:00</EStartDate>
</Event>
<Event>
<ETitle>Christmas Day</ETitle>
<EStartDate>25/012/2024 08:00:00</EStartDate>
</Event>
</root>
进入具有结构的列表<>:
public class Event
{
public required string ETitle { get; set; }
public DateTime EStartDate { get; set; }
}
所以列出。 目前,我尝试执行此操作的代码是
readonly string filepath = "EventsList.xml";
public DestCV()
{
InitializeComponent();
List<Event>? Events = [];
XmlSerializer serializer = new(Events.GetType());
try
{
FileStream fs2 = new(filepath, FileMode.OpenOrCreate, FileAccess.Read);
Events = serializer.Deserialize(fs2) as List<Event>;
}
catch (Exception)
{
throw;
}
pckr.ItemsSource = Events;
pckr.SelectedIndex = 0;
}
它的构建没有错误或警告。 当我在 Windows 中调试它时,它在
FileStream fs2 = new(filepath, FileMode.OpenOrCreate, FileAccess.Read);
行崩溃(您会注意到它位于 try catch 块中),并返回 App.g.i.cs 文件,并突出显示以下内容
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
#endif
我知道我做错了什么,但错误“报告”并不能真正帮助我识别错误。 任何建议表示赞赏。
请尝试以下解决方案。
它展示了如何将 XML 文件正确反序列化为
List<Event>
。
c#
void Main()
{
const string fileName = @"e:\Temp\Events.xml";
Events events;
XmlSerializer serializer = new XmlSerializer(typeof(Events));
using (Stream reader = new FileStream(fileName, FileMode.Open))
{
events = (Events)serializer.Deserialize(reader);
}
Console.WriteLine(events);
}
[XmlRoot("root")]
public class Events
{
[XmlElement(ElementName = "Event")]
public List<Event> events { get; set; }
}
[XmlType("Event")]
public class Event
{
[XmlElement("ETitle")]
public string ETitle { get; set; }
[XmlElement("EStartDate")]
public string EStartDate { get; set; }
}