Я использую следующий код для сравнения типов, чтобы 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 общий предок, но это не должно влиять на результат.