使用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]属性,或者通过将它放在顶部对象上,它是否递归地应用到内部的所有对象?
当前回答
我发现. net 2.0中的Dictionary类不能使用XML进行序列化,但是在使用二进制序列化时可以很好地进行序列化。
我在这附近找了份工作。
其他回答
我遇到了类似的问题,结果是序列化器无法区分具有相同名称的两个类(一个是另一个的子类)。内部异常是这样的:
“BaseNamespace类型。Class1和basenamspace . subnamespace。Class1'都使用XML类型名,'Class1',来自命名空间。使用XML属性为该类型指定唯一的XML名称和/或名称空间。
BaseNamespace.SubNamespace的地方。Class1是basenamspace .Class1的一个子类。
我需要做的是添加一个属性到一个类(我添加到基类):
[XmlType("BaseNamespace.Class1")]
注意:如果你有更多的类层,你需要为它们添加一个属性。
我最近在添加一个新属性时在一个web引用部分类中得到了这个。自动生成的类添加了以下属性。
[System.Xml.Serialization.XmlElementAttribute(Order = XX)]
我需要添加一个类似的属性,其顺序比自动生成序列中的最后一个高,这为我修复了它。
还要注意XmlSerializer不能序列化抽象属性。看到我的问题在这里(我已经添加了解决方案代码)..
XML序列化和继承类型
我一直在使用NetDataSerialiser类来序列化 我的域类。NetDataContractSerializer类。
域类在客户机和服务器之间共享。
记住,序列化类必须有默认的(即无参数的)构造函数。如果你根本没有构造函数,那很好;但如果构造函数带有形参,则还需要添加默认形参。