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

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

我得到一个异常说:

有错误反射类型。

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


当前回答

我最近在添加一个新属性时在一个web引用部分类中得到了这个。自动生成的类添加了以下属性。

    [System.Xml.Serialization.XmlElementAttribute(Order = XX)]

我需要添加一个类似的属性,其顺序比自动生成序列中的最后一个高,这为我修复了它。

其他回答

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

Or

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

看看你得到的内部异常。它将告诉您序列化哪个字段/属性有问题。

您可以通过使用[XmlIgnore]属性来装饰xml序列化中的字段/属性来排除它们。

XmlSerializer没有使用[Serializable]属性,所以我怀疑这是问题所在。

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

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

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

到目前为止,我有一个稍微不同的解决方案,所以对于任何未来的文明,这里是我的!

我已经声明了一个“时间”的数据类型,因为原始类型是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");
    }
}