我有一个从.xml文件返回对象的方法 (请不要介意资源的使用和命名,这只是一个例子)
public static T FromXMLFile<T>(string filePath)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
FileStream fs = new FileStream(filePath, FileMode.Open);
XmlTextReader xmlTextReader = new XmlTextReader(fs);
if(xmlSerializer.CanDeserialize(xmlTextReader))
{
object tempObject = (T)xmlSerializer.Deserialize(xmlTextReader );
xmlTextReader.Close();
return (T)tempObject;
}
else
return default(T);
}
现在,我想使用字符串而不是文件来执行相同的操作。我想出了类似的例子(同样是简化的例子)
public static T FromString<T>(string inputString)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T result;
try
{
using (TextReader reader = new StringReader(inputString))
{
result = (T)serializer.Deserialize(reader);
}
return result;
}
catch //temporary solution, finally should stick to .CanDeserialize(xmlTextReader) usage
{
return default(T);
}
}
在这种情况下,如何使用.CanDeserialize()?
答案 0 :(得分:0)
而不是使用Deserialize(TextReader)
重载,而是从XmlReader
创建一个TextReader
,并将XmlReader
用于Deserialize
和{{1} }通话:
CanDeserialize
这种方法(包括读取和写入功能)还允许您提供其他读取器/写入器设置,以实现对API的细粒度控制。