C# 当字符“0”时无法反序列化文本&#016“;找到

C# 当字符“0”时无法反序列化文本&#016“;找到,c#,encoding,deserialization,control-characters,C#,Encoding,Deserialization,Control Characters,我有一个.net应用程序,它尝试使用.net序列化程序反序列化字符串。 但是当在文本中找到时,我的序列化程序似乎失败了。 XML: 这不是有效的xml 十进制字符引用将以分号结尾,例如-即使使用分号,也将是代码点16“数据链接转义”-一些工具将拒绝该代码点;请注意,在XML 1.0中,只允许使用U+0009(制表符)、U+000A(换行符)和U+000D(回车符) 所以:请提供该文件的人提供有效的格式良好的XML,最好是XML 1.0。如果您有与xml 1.1兼容的工具,那

我有一个.net应用程序,它尝试使用.net序列化程序反序列化字符串。 但是当在文本中找到时,我的序列化程序似乎失败了。

XML:

这不是有效的xml

十进制字符引用将以分号结尾,例如
-即使使用分号,也将是代码点16“数据链接转义”-一些工具将拒绝该代码点;请注意,在XML 1.0中,只允许使用U+0009(制表符)、U+000A(换行符)和U+000D(回车符)


所以:请提供该文件的人提供有效的格式良好的XML,最好是XML 1.0。如果您有与xml 1.1兼容的工具,那么使用
预先编写xml可能会有所帮助。AFAIK:NET XML工具是基于1.0的。

那么有什么例外?“看起来我的序列化程序失败了”并不是一个好的错误报告。(而且对我来说,这听起来像是无效的XML——那么是什么创建了它,您能修复它以使您不再得到无效的XML吗?)当问题陈述很简单时,很难提供解决方案。请你的问题更完整地描述一下你预期会发生什么,以及这与实际结果有什么不同。请参阅,以获取关于什么是一个好的解释的提示。永远不要创建一个只抛出ex的try-catch块。唯一要做的就是销毁异常的堆栈跟踪,因为它是在抛出异常的位置(重新)生成的。如果您想在那里处理错误,但仍然传播错误,请使用
throw
后面没有
ex
<MyMessage>
   <MyObjectMessage messageId="30_636529918974765415">
     <body>&#016</body>
   </MyObjectMessage> 
</MyMessage>
var InvalidFile = @"C:\Users\jacjosep.ORADEV\Desktop\trial.xml";
ChatMessage responseMessage = null;
var chatSerilalizer = new XmlSerializer(typeof(MyObject));
using (FileStream fileStream = new FileStream(InvalidFile, FileMode.Open))
{
   using (StreamReader reader = new StreamReader(fileStream, Encoding.UTF8, true))
   {
      try
      {
         responseMessage = (chatSerilalizer.Deserialize(reader) as MyObject);
      }
      catch (Exception ex)
      { 
         throw ex;
      }

    }

}