我已经使用xsd.exe从http://www.gdsregistry.org/3.1/schemas/可用的模式中生成代码。C#反序列化扩展XML复杂类型
我试图反序列化catalogueItemNofiticationMessage(你可以在这里找到XML:http://www.gs1.se/globalassets/artikelinformation/example-files.zip)
我反序列化没有任何大惊小怪:
var cinmSerializer = new XmlSerializer(typeof(CatalogueItemNotificationMessageType));
var catalogueItemNotificationMessage = cinmSerializer.Deserialize(new FileStream(path, FileMode.Open)) as CatalogueItemNotificationMessageType;
中的文件发生会员我的问题DocumentCommandType,它不正确反序列化,我只是null。
DocumentCommandType具有在模式为DocumentType参考:
<xsd:complexType name="DocumentCommandType">
<xsd:sequence>
<xsd:element name="documentCommandHeader" type="gdsn_common:DocumentCommandHeaderType" />
<xsd:element ref="gdsn_common:document" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
CatalogueItemNotificationType扩展了此类型:
<xsd:complexType name="CatalogueItemNotificationType">
<xsd:complexContent>
<xsd:extension base="shared_common:DocumentType">
<xsd:sequence>
<xsd:element name="catalogueItemNotificationIdentification" type="shared_common:EntityIdentificationType" />
<xsd:element name="isReload" type="xsd:boolean" />
<xsd:element name="catalogueItem" type="catalogue_item_notification:CatalogueItemType" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
XML文件具有带有catalogueItemNotification一个documentCommand元件。 继承似乎是正确XSD.EXE回升,为DocumentType具有正确的XmlIncludeAttribute:
[System.Xml.Serialization.XmlIncludeAttribute(typeof(CatalogueItemNotificationType))]
[...]
public abstract partial class DocumentType {
而且CatalogueItemNotificationType类具有正确的继承:
public partial class CatalogueItemNotificationType : DocumentType
但仍然在反序列化XML文件字段保持为空。
我已经尝试将CatalogueItemNotificationType添加到XmlSerializer构造函数的extraTypes参数,以及使用XmlAttributeOverrides。