从字符串反序列化时使用XmlSerializer.CanDeserialize()

时间:2019-06-06 07:27:06

标签: c# serialization

我有一个从.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()?

1 个答案:

答案 0 :(得分:0)

而不是使用Deserialize(TextReader)重载,而是从XmlReader创建一个TextReader,并将XmlReader用于Deserialize和{{1} }通话:

CanDeserialize

这种方法(包括读取和写入功能)还允许您提供其他读取器/写入器设置,以实现对API的细粒度控制。