我目前正在使用xml文件,该文件通常应包含自定义对象列表(List),但有时可以只包含带有消息的字符串节点。我有一个反序列化此文件的代码:
private T DeserializeFile<T>(string filePath)
{
StreamReader readFileStream = new StreamReader(@filePath);
var serializerObj = new XmlSerializer(typeof(T));
return (T)serializerObj.Deserialize(readFileStream);
}
这适用于List但是对于简单的字符串抛出错误(InvalidOperationException - 缺少Root元素,或者“不期望”。)。当文件只包含字符串元素并从函数返回null时,如何检测大小写?
基本上这就是我想要做的事情:
private T DeserializeFile<T>(string filePath)
{
StreamReader readFileStream = new StreamReader(@filePath);
var serializerObj = new XmlSerializer(typeof(T));
try
{
return (T)serializerObj.Deserialize(readFileStream);
}
catch (Exception ex)
{
return null;
}
}
答案 0 :(得分:0)
这应该做你想做的事。它使用XDocument
来加载和解析文件,以便在尝试反序列化之前检查是否有任何元素。
private T DeserializeFile<T>(string filePath)
{
var xdoc = XDocument.Load(filePath);
if (xdoc.Root.Elements().Any())
{
var serializerObj = new XmlSerializer(typeof(T));
return (T)serializerObj.Deserialize(xdoc.CreateReader());
}
else
return default(T);
}
这假设您始终拥有有效的XML文件,唯一的区别在于根目录是包含更多元素还是仅包含文本,例如像
这样的清单<someRoot>
<someObj>
</someObj>
<someObj>
</someObj>
</someRoot>
像
这样的“字符串”<someRoot>just a string</someRoot>