我有一个数据库列,其中包含一些XML数据作为字符串。因此我不知道这个XML所代表的实际类型,我想读取这个XML的根标签,而不是反序列化这个类型的完整内容。由于嵌入式XML可能相当大,并且表中包含数千个这些对象,因此我需要一个快速解决方案。我的第一个方法是使用一些字符串魔法(可能使用正则表达式)简单地提取根标记,通过调用Type.GetType
来获取类型,然后为此类型创建序列化程序。但是,我看了XMLReader
,它也支持ValueType
-属性。在不知道类型的情况下反序列化XML
using (XmlReader reader = XmlReader.Create(new StringReader(myXmlAsString)))
{
reader.MoveToContent(); // get the root-element
Type type = reader.ValueType;
XmlSerializer ser = new XmlSerializer(type);
return ser.Deserialize(reader);
}
我必须面对的问题是,reader.ValueType
总是返回字符串类型,而随后由根标签表示的类型。
最后:两种解决方案中的哪一种会更快?第一个瓶颈应该是获得tapeName的正则表达式引擎,第二个方法可能是读取器操作。