XML序列化Windows正常,Android报错:根元素缺失
Android下XmlSerializer反序列化报错:Root element is missing(Windows正常)
我用以下代码从存储加载XML文件,Windows系统运行正常,但在Android系统抛出异常:
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; } }
异常信息:
System.InvalidOperationException: 'There is an error in XML document (0, 0).
Inner Exception: Root element is missing.
我已为AppModel类配置了如下特性,且确认字符串已正确加载:
[Serializable] [XmlRoot("AppModel")] public class AppModel { //... }
请问我遗漏了什么配置或步骤?
可能的解决方向
- 指定UTF-8编码读取文件:Android上
File.ReadAllText默认编码可能与Windows不一致,导致读取的XML包含不可见的BOM或乱码,表面长度>0但实际结构损坏。修改读取代码:
var txt = File.ReadAllText(path, Encoding.UTF8);
- 验证读取的XML实际内容:即使确认字符串已加载,也可能是加载了格式错误的内容(比如路径指向错误文件)。添加日志打印实际内容:
// Android可用Android.Util.Log打印 Android.Util.Log.Debug("XML_CONTENT", txt); // 或控制台输出 Console.WriteLine($"Loaded XML: {txt}");
确认内容是完整的、包含<AppModel>根节点的XML。
- 清理字符串中的空白字符:Windows与Android的换行符差异,或文件开头的多余空白,可能导致解析异常。读取后先清理:
txt = txt.Trim(); if (!string.IsNullOrEmpty(txt)) { // 执行反序列化逻辑 }
- 检查AppModel的序列化兼容性:确认AppModel的所有属性类型在Android上都能被XmlSerializer正确处理,比如自定义类型是否添加了合适的序列化特性,没有使用平台专属的类型。
内容的提问来源于stack exchange,提问作者krejale
相关产品推荐
相关产品推荐

