我们已经开始使用模式为我们生成C#类,我基本上试图复制一个重写了从它的基类继承的成员的类。我已经做了很多搜索,对XSD来说还是比较新的,所以我不知道我是不是错了,或者说这是不可能的。这是我想要完成的一个简化示例。
<xs:complexType name="ClientBase" abstract="true">
<xs:sequence>
<xs:element name="Company" type="CompanyBase" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="CompanyBase" abstract="true">
<xs:attribute name="Id" type="xs:int" use="required" />
</xs:complexType>
<xs:complexType name="Company">
<xs:complexContent>
<xs:extension base="CompanyBase">
<xs:attribute name="PartnerId" type="xs:int" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Client">
<xs:complexContent>
<xs:extension base="ClientBase">
<xs:sequence>
<!-- error occurs here -->
<xs:element name="Company" type="Company" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
这显然不起作用,因为它在我的客户端类型上爆炸,给我一个错误“元素'公司'的多重定义导致内容模型变得模棱两可”。
我的目标是最终得到代表这一点的东西。
public abstract class CompanyBase
{
public int Id { get; set; }
}
public class Company : CompanyBase
{
public int PartnerId { get; set; }
}
public abstract class ClientBase
{
public CompanyBase[] Company { get; set; }
}
public class Client : ClientBase
{
new public Company[] Company { get; set; }
}
非常感谢任何帮助。
答案 0 :(得分:0)
您指定为具有名为公司的元素的客户端的复杂类型,扩展 ClientBase ,其已包含元素名为公司(其类型为CompanyBase。)因此,您的元素名称中存在冗余。
另外:对于您的复杂类型,我建议您在模式中遵循命名约定,以阐明它们是类型,而不是全局元素。即,将复杂类型命名为 [Typename] Type ,而不是 [Typename] 。从长远来看,它可以减少混乱,你也可以避免与全局元素发生名称冲突。