读取XML数据出错 (十六进制值 0x00)是无效的字符 的解决办法

二次信任 提交于 2020-03-29 19:06:15

开发过程中出现XML 文件读入XElement 对象时出错,找了个解决办法,如下:

--------------------------------------

Ron

原地址:http://www.cnblogs.com/luolongda/archive/2010/11/05/1870064.html

 

提示错误,错误信息如下: 十六进制值 0x0B 是无效的字符错误

产生原因是xml文件中包含低位非打印字符造成的

处理方法:在产生xml文件的时候,过滤低位非打印字符

 

 private string ReplaceLowOrderASCIICharacters(string tmp)
        {
            StringBuilder info = new StringBuilder();
            foreach (char cc in tmp)
            {
                int ss = (int)cc;
                if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
                    info.AppendFormat(" ", ss);
                else info.Append(cc);
            }
            return info.ToString();
        }发现该文章浏览次数稍多,为了不误导大众,换个方法解决该问题,以下是我写的一个测试框架里的代码以作示例:
  /// <summary>
        /// 将XML反序列化为对象
        /// </summary>
        /// <typeparam name="T">实现IExtensibleDataObject接口对象 </typeparam>
        /// <param name="objStr">字符器</param>
        /// <returns></returns>
        public T Deserialize<T>(string objStr)
        where T : IExtensibleDataObject
        {
            if (string.IsNullOrWhiteSpace(objStr))
            {
                return default(T);
            }
            
            DataContractSerializer objSerializer = new DataContractSerializer(typeof(T));
            T result = default(T);
            using (TextReader reader = new StringReader(objStr))
            {
                XmlTextReader xreader = new XmlTextReader(reader);
                result = (T)objSerializer.ReadObject(xreader);
            }
            return result;
        }

 

 

 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!