private T DeserializeObject<T>(string xml, string encode = "UTF-8")
{
try
{
if (String.IsNullOrEmpty(xml)) return default(T);
Encoding _Encode = String.IsNullOrEmpty(encode) ? Encoding.Default : Encoding.GetEncoding(encode);
using (System.IO.MemoryStream mem = new MemoryStream(_Encode.GetBytes(xml))) // parasoft-suppress GC.UFID "Have closed it."
{
using (XmlReader reader = XmlReader.Create(mem))
{
XmlSerializer _xml = new XmlSerializer(typeof(T));
return (T)_xml.Deserialize(reader);
}
}
}
catch (Exception ex)
{
return Activator.CreateInstance<T>();
}
}
return (T)_xml.Deserialize(reader);这句话报错了,报“System.InvalidOperationException”,给定编码中的字符无效。
后来几经波折,更改了XML 表头,
<?xml version="1.0" encoding="UTF-8"?>
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</ROOT>
依然不好用,还是报错,
后来单步跟代码,发现默认的default 是gbk,所以试着改成UTF-8就可以正常读英文和中文混合的序列化和反序列化。
Encoding _Encode = Encoding.UTF8; //String.IsNullOrEmpty(encode) ? Encoding.Default : Encoding.GetEncoding(encode);
OK,看了一个多小时,终于搞定!