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

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

我得到一个异常说:

有错误反射类型。

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


当前回答

序列化图中的所有对象都必须是可序列化的。

由于XMLSerializer是一个黑盒,如果您想进一步调试序列化过程,请检查这些链接。

更改XmlSerializer输出临时程序集的位置

如何:调试到.NET XmlSerializer生成的程序集

其他回答

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

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

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

[System.Xml.Serialization.XmlElementAttribute("strFieldName", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]

Or

[XmlIgnore]
string [] strFielsName {get;set;}

序列化图中的所有对象都必须是可序列化的。

由于XMLSerializer是一个黑盒,如果您想进一步调试序列化过程,请检查这些链接。

更改XmlSerializer输出临时程序集的位置

如何:调试到.NET XmlSerializer生成的程序集

我刚刚得到了同样的错误,并发现类型IEnumerable<SomeClass>的属性是问题所在。IEnumerable似乎不能直接序列化。

相反,可以使用List<SomeClass>。