使用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; }
其他回答
看看你得到的内部异常。它将告诉您序列化哪个字段/属性有问题。
您可以通过使用[XmlIgnore]属性来装饰xml序列化中的字段/属性来排除它们。
XmlSerializer没有使用[Serializable]属性,所以我怀疑这是问题所在。
记住,序列化类必须有默认的(即无参数的)构造函数。如果你根本没有构造函数,那很好;但如果构造函数带有形参,则还需要添加默认形参。
有时,这种类型的错误是因为你没有不带参数的类结构
我刚刚得到了同样的错误,并发现类型IEnumerable<SomeClass>的属性是问题所在。IEnumerable似乎不能直接序列化。
相反,可以使用List<SomeClass>。
到目前为止,我有一个稍微不同的解决方案,所以对于任何未来的文明,这里是我的!
我已经声明了一个“时间”的数据类型,因为原始类型是TimeSpan,随后更改为字符串:
[System.Xml.Serialization.XmlElementAttribute(DataType="time", Order=3)]
然而,实际的类型是字符串
public string TimeProperty {
get {
return this.timePropertyField;
}
set {
this.timePropertyField = value;
this.RaisePropertyChanged("TimeProperty");
}
}
通过删除DateType属性,Xml可以被序列化
[System.Xml.Serialization.XmlElementAttribute(Order=3)]
public string TimeProperty {
get {
return this.timePropertyField;
}
set {
this.timePropertyField = value;
this.RaisePropertyChanged("TimeProperty");
}
}