假设我们有一些类似的代码:
[XmlRoot("class-a")]
public class ClassA
{
[XmlElement("variable")] // without this everything works fine
public ClassB<Type1, Type2> Variable;
public ClassA()
{
new XmlSerializer(typeof(ClassA)); // exception occurs here
}
}
public class ClassB<TKey, TValue>
: NonSerializableClassC<TKey, TValue>, IXmlSerializable
{
// irrelevant stuff
}
在标题的上下文中,一切都是不言自明的。
请注意,这是 .NET CF [3.5],其中 XmlSerialization 的内部完全不同(由于性能问题)。相同的代码在 .NET [4.0] 的桌面版本下运行良好。此外,这个问题实际上并没有影响我的工作,因为我仅将 XmlElementAttribute 用于元素别名,通过重命名变量本身可以轻松访问。但这不是一个真正的解决方案。
所以......任何想法为什么这不起作用?
堆栈跟踪的最后条目:
// . . .
System.Xml.dll!System.Xml.Serialization.XmlSerializer.XmlSerializer(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"})
System.Xml.dll!System.Xml.Serialization.XmlSerializer.XmlSerializer(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, System.Xml.Serialization.XmlAttributeOverrides overrides = null, System.Type[] extraTypes = null, System.Xml.Serialization.XmlRootAttribute root = null, string defaultNamespace = null)
System.Xml.dll!System.Xml.Serialization.XmlSerializer.findTypeByType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, string defaultNamespace = null)
System.Xml.dll!System.Xml.Serialization.XmlSerializationReflector.FindType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, bool encoded = false, string defaultNamespace = null, bool searchIntrinsics = true)
System.Xml.dll!System.Xml.Serialization.XmlSerializationReflector.AddType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, bool encoded = false, string defaultNS = null, bool genericNullableArg = false)
UPD1:顺便说一句,如果我在 ClassB 声明上方添加 XmlTypeAttribute/XmlRootAttribute - 在同一个地方发生同样的异常。