【问题标题】:Debugging a "There was an error generating the XML document" message调试“生成 XML 文档时出错”消息
【发布时间】:2015-04-22 11:51:57
【问题描述】:

当我的数据库是从旧版应用程序创建时,我在将配置写入 XML 文件时遇到问题。 XML 文档看起来好像在准确地告诉我问题出在哪里,但我不知道它是什么意思。

我的应用程序允许用户将配置从数据库保存到 xml 文件,我正在使用 XmlSerializer 和文件流将我的配置类写入 xml 文档。

这是配置类中的write方法

    public void Write(Stream stream)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Configuration));

        serializer.Serialize(stream, this);
    }

这是调用它的语句

            using (FileStream fileStream = new FileStream(filename, FileMode.Create))
            {
                config.Write(fileStream);
            }

一切正常,我可以保存配置文件。我遇到的问题是我们有一个伪旧版应用程序,用于设置所有内容,但是如果这设置了数据库,那么我的应用程序中的所有内容都可以正常加载,但是每当我尝试从这些数据库之一保存配置时,它会导致 “生成 XML 文档时出错” 错误消息。

我真的不明白如何用这个进行调试。当我查看生成的 xml 文件时,它会在中途停止,例如

  <ServerIPAddress1>127</ServerIPAddress1>
  <ServerIPAddress2>0</ServerIPAddress2>
  <ServerIPAddress3>0</ServerIPAddress3>
  <ServerIPAddress4>1</Ser

当我看到这个时,我认为它一定意味着下一个属性是给它带来问题的值,但是在两个版本中该值都是空白的。

谁能告诉我在哪里查看此错误。我尝试了很多不同的事情,例如加载可以保存的配置以修改 xml,使其格式正确,当我再次将其保存到文件时,一切似乎都正常工作。

【问题讨论】:

  • 您看到的InvalidOperationException 没有用,但里面的InnerException 会有用。去找到这个并用其中的消息更新问题。另请参阅this guide
  • 当我打开 clr 异常时,它给了我错误的确切字段。旧应用程序将枚举值设置为 255,这是我们的版本中没有的。无论如何,这是不必要的,所以我们只是将其删除,现在一切正常!如何在此处将您的评论标记为答案?
  • 问题属性在 serverIPAddress4 属性之前大约 7 或 8 个属性。所以我很想知道为什么它决定停在那里。我猜没有人会知道这个问题的答案,它可能只是微软的一个怪癖,我们都必须忍受!
  • @Keithin8a 我将我的评论更改为答案,您现在可以查看。

标签: c# xml filestream xmlserializer


【解决方案1】:

首先,尝试获取有关异常的更多信息:是否存在innerException?

使用 Visual Studio,您可以尝试暂时抛出 CLR 异常以获取更多信息。

(调试->异常->检查CLR异常)

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多