【问题标题】:XmlSerializer Deserialize fails in release modeXmlSerializer 反序列化在发布模式下失败
【发布时间】:2012-09-06 12:26:28
【问题描述】:

这很奇怪。我有一个格式良好的 XML 配置文件。我从文件中创建了一个流,并使用看似非常典型的代码对其进行序列化:

TextWriter tw = new StreamWriter(tempFile);

我使用如下创建的序列化程序:

XmlSerializer ConfigSettingSerializer = new XmlSerializer(typeof(ConfigSettings));

其中 ConfigSettings 只是一个包含字符串变量和值的容器类。

然后,我使用 ConfigurationManager 类和 AppSettings 将序列化流作为配置存储起来。然后我从 appSettings 检索序列化数据并尝试将流转换回原始类:

string configXml = ConfigurationManager.AppSettings[Id];
using (StringReader reader = new StringReader(configXml))
        {                
            retVal = (ConfigSettings)MVHelper.ConfigSettingSerializer.Deserialize(reader);
        }       

这一切都运行良好,直到我从调试切换到发布,当我在反序列化调用上收到关于无效 XML 的错误时,抱怨文档中的最后一个字符:XML 文档中存在错误 (92, 18 )。内部异常是:“根级别的数据无效。第 92 行,第 18 位”。该文档与在调试模式下生成的文档相同,并且可以在任何浏览器中正常呈现。我的猜测是,可能还有其他事情发生,真正的错误以某种方式被掩盖了,但到目前为止我还没有看到。任何建议将不胜感激。

谢谢,

加里

【问题讨论】:

  • 如果将 xml 缩短到最低限度会发生什么?您仍然收到错误消息吗?
  • stackoverflow.com/q/5748668/395718中的可能解决方案
  • 最小化 configsettings 类以仅包含一个值我仍然得到同样的错误。

标签: c# xml serialization


【解决方案1】:

在十六进制编辑器或其他二进制编辑器中加载 XML 文件,并检查编码前导码等不可打印字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多