【发布时间】:2015-01-21 16:52:36
【问题描述】:
我正在尝试采用 XML 模式并将关系转换为 C# 类。我遇到的情况如下:
我在架构中有一个复杂类型,它有 4 个元素,都是某种类型:
<xs:complexType name="ReportingBaseType" abstract="true">
<xs:sequence>
<xs:element name="Category" type="ent:ReportingCategoryConceptType" minOccurs="0" maxOccurs="0"/>
<xs:element name="Frequency" type="ent:ReportingFrequencyType"/>
<xs:element name="AdjustmentFrequency" type="ent:ReportingAdjustmentFrequencyType"/>
<xs:element name="FirstReportDueDate" type="ent:CXMLDateType" minOccurs="0" maxOccurs="0"/>
</xs:sequence>
</xs:complexType>
接下来,我有多种复杂类型可以限制或扩展这种类型:
<xs:complexType name="ReportingClassA">
<xs:restriction base="ReportingBaseType">
<xs:sequence>
<xs:element name="Category" type="ent:ReportingClassAType" minOccurs="0" maxOccurs="0"/>
<xs:element name="Frequency" type="ent:FequencyForThisClassType"/>
</xs:sequence>
</restriction>
</xs:complexType>
<xs:complexType name="ReportingClassB">
<xs:restriction base="ReportingBaseType">
<xs:sequence>
<xs:element name="Category" type="ent:NewTypeForThisClass" minOccurs="0" maxOccurs="0"/>
<xs:element name="Frequency" type="ent:AnotherNewType"/>
<xs:element name="AdjustmentFrequency" type="ent:ThisIsADifferntTypeThenParent"/>
<xs:element name="FirstReportDueDate" type="ent:AndAnotherNewType" minOccurs="0" maxOccurs="
</xs:sequence>
</restriction>
</xs:complexType>
我如何(在 C# 中)从父类 (ReportingBaseType) 派生但具有不同类型的属性,就像它们在 Schema 中定义的一样?
我曾想过在派生类上定义我的属性以“隐藏”继承的成员时使用new 关键字,但我听说在序列化此对象时,XML 序列化程序可能无法正确处理。
是否有人对如何正确地将我的架构与 C# 类相关联并且仍然能够将我的 C# 对象序列化以更正将通过 XML 架构验证的 XML 对象有任何建议?
编辑:我尝试使用 Xsd2Code 和内置的 xsd.exe 工具来处理正确的 C# 类,但它们不会生成我需要的详细信息。尤其是在我上面描述的情况下。
【问题讨论】:
标签: c# .net xml serialization xml-serialization