Я столкнулся с подобной проблемой, и я нашел то же решение. Насколько мне известно, это единственный способ сохранить типы вместе со значениями в XML-сериализации.
Я вижу, вы вырезали версию сборки, как я тоже. Но я хотел бы отметить, что у вас будут проблемы с родовыми типами, так как их подпись выглядит так:
System.Nullable`1[[System.Int, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Итак, я сделал функцию, чтобы вырезать только версию (и) сборки, которая, по-видимому, достаточна для устранения проблем с версиями:
private static string CutOutVersionNumbers(string fullTypeName)
{
string shortTypeName = fullTypeName;
var versionIndex = shortTypeName.IndexOf("Version");
while (versionIndex != -1)
{
int commaIndex = shortTypeName.IndexOf(",", versionIndex);
shortTypeName = shortTypeName.Remove(versionIndex, commaIndex - versionIndex + 1);
versionIndex = shortTypeName.IndexOf("Version");
}
return shortTypeName;
}