2012-09-06 57 views
0

这很奇怪。我有一个配置文件,它是格式良好的XML。我从文件创建流并使用似乎是非常典型的代码序列化:XmlSerializer反序列化在发布模式下失败

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位”。该文档与在调试模式下生成的文档相同,并且在任何浏览器中呈现良好。我的猜测是,可能还有其他事情在发生,真正的错误在某种程度上被掩盖了,但到目前为止我没有看到它。任何建议将不胜感激。

谢谢,

加里

+0

如果您将xml缩短为最小值,会发生什么情况?你仍然得到错误? – Default

+0

可能的解决方案http://stackoverflow.com/q/5748668/395718 – Dialecticus

+0

最小化configsettings类以仅包含一个值我仍然得到相同的错误。 – Gary

回答

0

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