使用c# . net 2.0,我有一个组合数据类,它确实有[Serializable]属性。我正在创建一个XMLSerializer类并将其传递到构造函数中:

XmlSerializer serializer = new XmlSerializer(typeof(DataClass));

我得到一个异常说:

有错误反射类型。

在数据类内部有另一个复合对象。这是否也需要有[Serializable]属性,或者通过将它放在顶部对象上,它是否递归地应用到内部的所有对象?


当前回答

有一种情况是连续的两个元素的顺序是相同的

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "SeriousInjuryFlag")]

.... 一些代码…

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "AccidentFlag")]

当我将代码更改为类中每个新Property的顺序加1时,错误就消失了。

其他回答

有时,这种类型的错误是因为你没有不带参数的类结构

我也有同样的问题,在我的例子中,对象有一个ReadOnlyCollection。集合必须实现Add方法才能序列化。

我认为最常见的原因是:

 - the object being serialized has no parameterless constructor
 - the object contains Dictionary
 - the object has some public Interface members

我发现. net 2.0中的Dictionary类不能使用XML进行序列化,但是在使用二进制序列化时可以很好地进行序列化。

我在这附近找了份工作。

我一直在使用NetDataSerialiser类来序列化 我的域类。NetDataContractSerializer类。

域类在客户机和服务器之间共享。