我尝试从存储中加载一个XML文件,如下所示:
var serializer = new XmlSerializer(typeof(AppModel));
var txt = File.ReadAllText(path);
if (txt.Length > 0)
{
using (var stringReader = new StringReader(txt))
{
var ret = (AppModel)serializer.Deserialize(stringReader);
return ret;
}
}
在Windows上一切正常,但在Android上会抛出异常:
System.InvalidOperationException:'XML文档(0,0)中有错误。内部异常:缺少根元素。
但是我设置了RootElement,正如我所说的,这在Windows上工作,字符串也正确加载:
[Serializable]
[XmlRoot("AppModel")]
public class AppModel
{
//...
}
我错过什么了吗?
1条答案
按热度按时间olmpazwi1#
您遇到的问题很可能是由文件开头的UTF-8字节顺序标记(BOM)引起的,XML序列化程序无法处理这种情况。
处理此问题的一种方法是检查BOM是否存在,然后在解析或反序列化
string
之前将其删除(类似于在this answer中的操作)。为此,您可以创建一个sanitizer扩展方法,如下所示:
然后在反序列化XML之前使用它:
这将解决Android的问题。