使用XSD.exe生成的这些类级属性中的哪一个可以安全地丢弃?

时间:2014-03-04 21:39:42

标签: c# custom-attributes xml-deserialization xsd.exe

我对XML模式文件(.XSD)使用了 XSD.exe 来生成C#类,用于反序列化符合所述XML模式的XML数据文件。

我注意到所有生成的类都添加了以下类级属性。

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]

在某些情况下,该工具还生成了XmlElementAttribute属性,我很清楚这是正确反序列化所必需的。

[System.Xml.Serialization.XmlElementAttribute("Field")]

除此XmlElementAttribute之外,反序列化确实需要哪些上述属性才能成功。我知道我可以逐个删除它们并尝试一下,但是有很多类,我希望尽可能保持我的类定义“干净”,而不需要在整个地方都有不必要的属性。

这是 XSD.exe 生成的示例类定义,以防您需要查看该类。

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class CrystalReportReportFooter {

    private CrystalReportReportFooterSection sectionField;

    /// <remarks/>
    public CrystalReportReportFooterSection Section {
        get {
            return this.sectionField;
        }
        set {
            this.sectionField = value;
        }
    }
}

谢谢,

1 个答案:

答案 0 :(得分:1)

除非重新生成代码的工具需要这样做,否则应该可以安全删除。

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]

你需要这个,因为这是告诉一个类可以序列化的。

[System.SerializableAttribute()]

这可以删除。它纯粹用于调试,如果添加自定义代码,可能会在以后阻碍调试。

[System.Diagnostics.DebuggerStepThroughAttribute()]

这可以删除。仅用于IDE或利用它的任何WYSIWYG设计器。

[System.ComponentModel.DesignerCategoryAttribute("code")]

这取决于你。基本上它告诉Serializer该类是匿名XSD类型。

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]