尝试序列化List <Obj>时出现XMLSerializer错误。 “抛出异常:System.Private.Xml.dll中的'System.InvalidOperationException'”

时间:2019-06-16 01:06:24

标签: c# discord.net

我已经尝试调试我的Discord机器人项目的问题(使用Discord的API)已有相当一段时间了。如果有人可以帮助我确定问题,我将不胜感激。 这是我要执行的操作的详细信息:

  • 我想将Archive对象的列表保存到一个名为config.xml的xml文件中。

  • 我在主“ Program”类中声明该列表,但在“存档类”方法AddArchive()中使用它。我敢肯定有更好的方法。

  • 当尝试向列表中添加新的Archive对象,然后对其进行xml序列化时,出现以下错误: 引发的异常:System.Private.Xml.dll中的'System.InvalidOperationException',控制台显示“生成XML文档时出错。” xml文件已创建,但未编写任何文件。

这是我的存档课程:

public class Archive : Program
{
    public ulong sourceID { get; set; }
    public ulong destID { get; set; }

    public Archive() { }

    public Archive(ulong sourceID, ulong destID)
    {
        this.sourceID = sourceID;
        this.destID = destID;
        AddArchive();
    }

    private void AddArchive()
    {
        if (!archiveList.Contains(this))
        {
            archiveList.Add(this);
            XmlSerializer archiveXML = new XmlSerializer(typeof(List<Archive>));
            TextWriter tw = new StreamWriter(Directory.GetCurrentDirectory() + "\\config.xml");
            archiveXML.Serialize(tw, archiveList); //Error occurs here
            tw.Close();
        }

    }

}

我在主程序类中的处理程序:

private async Task HandleCommandAsync(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;

        if (message is null || message.Author.IsBot)
            return;

        int argPos = 0;

        if (message.HasStringPrefix("!", ref argPos) || message.HasMentionPrefix(client.CurrentUser, ref argPos))
        {
            var context = new SocketCommandContext(client, message);

            var result = await commands.ExecuteAsync(context, argPos, services);

            if (!result.IsSuccess)
                Console.WriteLine(result.ErrorReason);
        }
    }

最后是addarchive命令类:

public class AddArchiveCommand : ModuleBase<SocketCommandContext>
{
    [Command("addarchive")]
    public async Task AddArchiveAsync(ITextChannel sourceChan, ITextChannel destChan)
    {
        Archive temp = new Archive(sourceChan.Id, destChan.Id);
    }
}

我希望config.xml文件中有一个带有sourceid和destinationid的新条目。谢谢您的帮助。

0 个答案:

没有答案