我使用以下代码来比较类型,以便在必要时DataContractSerializer将使用正确的类型重新初始化。
private void InitializeSerializer(Type type)
{
if (this.serializer == null)
{
this.serializer = new DataContractSerializer(type);
this.typeToSerialize = type;
}
else
{
if (this.typeToSerialize != null)
{
if (this.typeToSerialize.GetType() != type.GetType())
{
this.serializer = new DataContractSerializer(type);
this.typeToSerialize = type;
}
}
}
}由于某些原因,当我比较这两种类型时,结果总是真的,并且我从不输入最后的'if‘语句并重新初始化我的序列化程序。
我可以在比较时设置一个断点,并清楚地看到这两种类型是List<Host> (this.typeToSerialize.GetType())和Post (type.GetType())
Host和Post都有一个共同的祖先,但这不应该影响结果。
发布于 2010-10-07 21:42:35
您正在System.Type上调用GetType()。这将返回一个描述System.Type本身的System.Type对象。
这使得代码
if (this.typeToSerialize.GetType() != type.GetType())
{
...
}等同于:
if(typeof(System.Type) != typeof(System.Type)) // Always false
{
... // Never enters here
}我猜你真正想做的是:
if(typeToSerialize != type)
{
...
}发布于 2010-10-07 21:43:25
if (this.typeToSerialize != type)看起来更合适
发布于 2010-10-07 21:47:00
看起来您正在比较两个Type对象的类型。我认为您需要比较类型对象本身。
this.typeToSerialize != typethis.typeToSerialize.GetType()和type.GetType()都将返回typeof(类型)(相同的对象)。
https://stackoverflow.com/questions/3882196
复制相似问题