使用 C# MAUI 将 xml 文件中的数据加载到 List<> 中

问题描述 投票:0回答:1

我正在使用 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

我知道我做错了什么,但错误“报告”并不能真正帮助我识别错误。 任何建议表示赞赏。

c# xml stream maui
1个回答
0
投票

请尝试以下解决方案。

它展示了如何将 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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.