使用c# . net 2.0,我有一个组合数据类,它确实有[Serializable]属性。我正在创建一个XMLSerializer类并将其传递到构造函数中:
XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
我得到一个异常说:
有错误反射类型。
在数据类内部有另一个复合对象。这是否也需要有[Serializable]属性,或者通过将它放在顶部对象上,它是否递归地应用到内部的所有对象?
使用c# . net 2.0,我有一个组合数据类,它确实有[Serializable]属性。我正在创建一个XMLSerializer类并将其传递到构造函数中:
XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
我得到一个异常说:
有错误反射类型。
在数据类内部有另一个复合对象。这是否也需要有[Serializable]属性,或者通过将它放在顶部对象上,它是否递归地应用到内部的所有对象?
当前回答
当我创建一个具有数据类型-类型的属性时,我得到了相同的错误。在此,我得到了一个错误-有一个错误反射类型。我不断检查'InnerException'的每个异常从调试码头和得到特定的字段名(这是类型)在我的情况下。解决方法如下:
[XmlIgnore]
public Type Type { get; set; }
其他回答
还要注意,您不能序列化用户界面控件,并且您想传递到剪贴板上的任何对象都必须是可序列化的,否则就不能传递给其他进程。
序列化图中的所有对象都必须是可序列化的。
由于XMLSerializer是一个黑盒,如果您想进一步调试序列化过程,请检查这些链接。
更改XmlSerializer输出临时程序集的位置
如何:调试到.NET XmlSerializer生成的程序集
有一种情况是连续的两个元素的顺序是相同的
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "SeriousInjuryFlag")]
.... 一些代码…
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "AccidentFlag")]
当我将代码更改为类中每个新Property的顺序加1时,错误就消失了。
我刚刚得到了同样的错误,并发现类型IEnumerable<SomeClass>的属性是问题所在。IEnumerable似乎不能直接序列化。
相反,可以使用List<SomeClass>。
我遇到了类似的问题,结果是序列化器无法区分具有相同名称的两个类(一个是另一个的子类)。内部异常是这样的:
“BaseNamespace类型。Class1和basenamspace . subnamespace。Class1'都使用XML类型名,'Class1',来自命名空间。使用XML属性为该类型指定唯一的XML名称和/或名称空间。
BaseNamespace.SubNamespace的地方。Class1是basenamspace .Class1的一个子类。
我需要做的是添加一个属性到一个类(我添加到基类):
[XmlType("BaseNamespace.Class1")]
注意:如果你有更多的类层,你需要为它们添加一个属性。