我想基于xsd创建一个xml,它将在运行时使用XmlSerializer
和StreamReader
加载到C#对象中。
我的C#对象应具有此示例中的结构:
class Repository {
public string Name { get; set; }
public List<IPerson> Persons { get; set; }
}
interface IPerson {
int ID { get; set; }
}
class Student : IPerson {
int ID { get; set; }
string Faculty { get; set; }
}
class Fireman : IPerson {
int ID { get; set; }
bool IsOfficer { get; set; }
}
class Giant : IPerson {
int ID { get; set; }
int Height { get; set; }
}
我希望能够在xml上放置IPerson
的不同实现,并在运行时将它们加载到正确的类型中。
我理解如何在xsd中定义抽象类型和扩展类型。
<xs:complexType abstract="true" name="IPerson">
<xs:attribute name="ID" type="xs:int"/>
</xs:complexType>
<xs:complexType name="Student">
<xs:complexContent>
<xs:extension base="IPerson">
<xs:attribute name="Faculty" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Fireman">
<xs:complexContent>
<xs:extension base="IPerson">
<xs:attribute name="IsOfficer" type="xs:boolean" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Giant">
<xs:complexContent>
<xs:extension base="IPerson">
<xs:attribute name="Height" type="xs:int" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
如何将多态列表Persons
作为Repository
类型的一部分在xsd和xml上表示?