XML序列化成功反序列化失败以及xml 十六进制值 0x0E)是无效的字符

出现XML序列化成功,但是反序列化失败问题

可能由于被序列化的对象中包含低序位非打印 ASCII 字符例如字符:

 

字符在序列化时会把把一个字符串中的 低序位 ASCII 字符 替换成 &#x 编码字符

例如

<?xml version="1.0"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UserName>好&#xE;强大</UserName>
</User>

例如&#xE;就是编码后的 字符

/// 把一个字符串中的 低序位 ASCII 字符 替换成16进制s字符   
/// 转换 ASCII 0 - 8 -> � -
/// 转换 ASCII 11 - 12 -> -
/// 转换 ASCII 14 - 31 -> -
/// </summary>
/// <param name="tmp"></param>
/// <returns></returns>
public static 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("{0:X};", ss);
else info.Append(cc);
}
return info.ToString();
}

如果反序列化时未给这种&#xE;做特殊处理,反序列化将失败,

处理方式如下:

1.序列化时给此类字符做特殊编码

2.在反序列化时替换掉

 

 

如果xml中包含有未编码的低位字符,XmlDocument对象将报错

例如

 

1.txt文件内容如下

<?xml version="1.0"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UserName>好强大</UserName>
</User>

好有红色标记的低位特殊字符,所有xml需要将这类字符替换掉

 

替换掉未编码的低位序列字符,例如替换掉:

 

   public static string Repalce(string str)
{
return System.Text.RegularExpressions.Regex.Replace(str, @"[\x00-\x08]|[\x0B-\x0C]|[\x0E-\x1F]", "");
}


替换后xml正常加载

转载于:https://www.cnblogs.com/lichaoxyz/archive/2012/04/02/2429726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值