找到字符"&#016"时无法反序列化文本

0 c# encoding control-characters deserialization

我有一个.net应用程序尝试使用.net序列化程序反序列化字符串.但看起来我的序列化程序在文本中找到#016时失败了.

XML:

<MyMessage>
   <MyObjectMessage messageId="30_636529918974765415">
     <body>&#016</body>
   </MyObjectMessage> 
</MyMessage>
Run Code Online (Sandbox Code Playgroud)


C#代码:

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;
      }

    }

}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 7

这不是有效的xml.

十进制字符引用将以分号终止,例如&#016;- 甚至使用分号,这将是代码点16"数据链接转义" - 某些工具将拒绝; 从注意这里,在XML 1.0,唯一允许的控制字符是U + 0009(制表符),U + 000A(换行)和U + 000D(回车).

所以:问问谁为你提供了该文件,以便提供有效的格式良好的XML,最好是XML 1.0.如果您具有与XML 1.1兼容的工具<?xml version="1.1"?>,那么在xml之前添加它可能会有所帮助.AFAIK:.NET XML工具基于1.0.