讀取XML數據出錯 (十六進制值 0x00)是無效的字符 的解決辦法


開發過程中出現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;
        }

 

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM