我使用xsd.exe从http://www.gdsregistry.org/3.1/schemas/提供的模式生成代码。
我正在尝试反序列化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。
答案 0 :(得分:0)
在调试xmlserializer后想出来。
序列化程序并不了解DocumentType []文档字段可以是基本类型DocumentType。
将以下属性添加到该属性解决了它:
INSERT INTO #TempTable
exec sp_executesql @query