Serialization 反序列化未知类型的对象
我有一堆被序列化为XML的对象。现在我想对它们进行反序列化,但由于我不知道给定XML字符串的类型,所以我不知道如何进行反序列化。当我知道对象的类型(在本例中为任务)时,下面是我正在使用的代码:Serialization 反序列化未知类型的对象,serialization,xml-serialization,Serialization,Xml Serialization,我有一堆被序列化为XML的对象。现在我想对它们进行反序列化,但由于我不知道给定XML字符串的类型,所以我不知道如何进行反序列化。当我知道对象的类型(在本例中为任务)时,下面是我正在使用的代码: public static Task DeserializeFromXML(string value) { Task task = new Task(); StringReader reader = new StringReader(value); XmlSerializer serializ
public static Task DeserializeFromXML(string value)
{
Task task = new Task();
StringReader reader = new StringReader(value);
XmlSerializer serializer = new XmlSerializer(task.GetType());
XmlReader xmlReader = new XmlTextReader(reader);
task = (Task)serializer.Deserialize(xmlReader);
return task;
}
我很困惑,因为XmlSerializer需要一个传递给构造函数的类型,反序列化方法最终需要从对象转换为我刚刚反序列化的任何对象,但我现在不知道该类型是什么。XML序列化器不包含有关序列化出的对象类型的信息。对于纯XML,您没有办法解决这个问题。序列化中不包括对象类型
NET中的其他一些序列化程序(尤其是NetDataContractSerializer)确实包含了足够的信息,可以在不事先知道的情况下重构特定的对象类型。您使用的是.NET 1.1吗?如果没有,那么您应该使用
XmlReader.Create()
而不是new XmlTextReader()
。首先为什么要反序列化未知类型的实例?我写了这两个方面,所以如果有更好的方法,我不必使用XML。如果我将它序列化为二进制,那么我是否能够反序列化为一个对象,然后测试它是什么类型(使用“is”)?