我已經使用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。