Some parts of XML not deserialized (inheritance?)

Jan 22, 2013 at 2:54 PM

Hello, 

We have a XSD (BRKLeveringGemeenteGebaseerdeStand_v1_1_4). We created c# classes from this XSD (which uses quite a lot imports of other XSD's).

1. We validate the given xml agains the xsd. No error occurres.
2. We deserialize the cxml to the object. No error.
3. But when we look into the object some objects have a 'null' value while data exists in the XML file.

The XML file:

<?xml version="1.0" encoding="UTF-8"?><!--Created by GO Publisher Agent 1.4.5-SNAPSHOT Build 25198 from 2011-09-20 12:51--><!--Snowflake Software Ltd. (http://www.snowflakesoftware.co.uk)--><GemeenteGebaseerdeStand:GemeenteGebaseerdeStand xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:GemeenteGebaseerdeStand="http://www.kadaster.nl/schemas/brk-levering/product-gemeentegebaseerdestand/v20120901" xmlns:Typen="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-typen/v20120201" xmlns:Snapshot="http://www.kadaster.nl/schemas/brk-levering/snapshot/v20120901" xmlns:GbaPersoon="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-gba-persoon/v20120901" xmlns:Adres="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-adres/v20120201" xmlns:Persoon="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-persoon/v20120201" xmlns:NEN3610="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-NEN3610-2011/v20120201" xmlns:BagAdres="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-bag-adres/v20120201" xmlns:KadastraalObject="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-kadastraalobject/v20120701" xmlns:InOnderzoek="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-inonderzoek/v20120201" xmlns:KadastraalObjectRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-kadastraalobject-ref/v20120201" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:smil20="http://www.w3.org/2001/SMIL20/" xmlns:smil20lang="http://www.w3.org/2001/SMIL20/Language" xmlns:NhrRechtspersoon="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-nhr-rechtspersoon/v20120201" xmlns:Recht="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-recht/v20120201" xmlns:GbaPersoonRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-gba-persoon-ref/v20120201" xmlns:PersoonRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-persoon-ref/v20120201" xmlns:NhrRechtspersoonRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-nhr-rechtspersoon-ref/v20120201" xmlns:RechtRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-recht-ref/v20120201" xmlns:StukRef="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-stuk-ref/v20120201" xmlns:Stuk="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-stuk/v20120201" xsi:schemaLocation="http://www.kadaster.nl/schemas/brk-levering/product-gemeentegebaseerdestand/v20120901 BRKLeveringGemeenteGebaseerdeStand_v1_1_4.xsd">
<GemeenteGebaseerdeStand:BRKDatum>2009-10-31</GemeenteGebaseerdeStand:BRKDatum>
<GemeenteGebaseerdeStand:naamBurgerlijkeGemeente>
<Typen:code>ASN00</Typen:code>
<Typen:waarde>Assen</Typen:waarde>
</GemeenteGebaseerdeStand:naamBurgerlijkeGemeente>
<GemeenteGebaseerdeStand:stand>
<Snapshot:KadastraalObjectSnapshot>
<Snapshot:referentie>30FC5C7FC810-1D3C7E1EEFF</Snapshot:referentie>
<Snapshot:toestandsdatum>2009-10-31</Snapshot:toestandsdatum>
<KadastraalObject:Perceel id="ID.50667496">
<KadastraalObject:identificatie>
<NEN3610:namespace>NL.KAD.OnroerendeZaak</NEN3610:namespace>
<NEN3610:lokaalId>53860441770000</NEN3610:lokaalId>
</KadastraalObject:identificatie>
<KadastraalObject:heeftLocatie>
<KadastraalObject:LocatieKadastraalObject>
<KadastraalObject:cultuurBebouwd>
<Typen:code>11</Typen:code>
<Typen:waarde>Wonen</Typen:waarde>
</KadastraalObject:cultuurBebouwd>
<KadastraalObject:adres>
<Adres:KADBinnenlandsAdres>
<Adres:openbareRuimteNaam>DE GAARDE</Adres:openbareRuimteNaam>
<Adres:huisNummer>4</Adres:huisNummer>
<Adres:postcode>9402LJ</Adres:postcode>
 The XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:GemeenteGebaseerdeStand="http://www.kadaster.nl/schemas/brk-levering/product-gemeentegebaseerdestand/v20120901" xmlns:Typen="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-typen/v20120201" xmlns:Snapshot="http://www.kadaster.nl/schemas/brk-levering/snapshot/v20120901" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.kadaster.nl/schemas/brk-levering/product-gemeentegebaseerdestand/v20120901" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.4">
	<xs:annotation>
		<xs:appinfo source="http://www.kadaster.nl/schema-info/uri">http://www.kadaster.nl/schemas/brk-levering/product-gemeentegebaseerdestand</xs:appinfo>
		<xs:appinfo source="http://www.kadaster.nl/schema-info/version">1.1.4</xs:appinfo>
		<xs:appinfo source="http://www.kadaster.nl/schema-info/release">20120901</xs:appinfo>
		<xs:appinfo source="http://www.kadaster.nl/schema-info/svn">$Id$</xs:appinfo>
		<xs:documentation source="http://www.kadaster.nl/schema-info/conversion">Bestandsnaam: BRKLeveringGemeenteGebaseerdeStand_v1_1_4.xsd / 
        Dit schema is samengesteld in overeenstemming met de codeerregels vastgelegd in  
        ISO 19118: Text of 19118 Geographic information - Encoding, as sent to the ISO Central 
        Secretariat for publication
    </xs:documentation>
		<xs:documentation source="http://www.kadaster.nl/schema-info/technical-documentation">TODO</xs:documentation>
	</xs:annotation>
	<xs:import namespace="http://www.kadaster.nl/schemas/brk-levering/snapshot/imkad-typen/v20120201" schemaLocation="../../snapshot/imkad-typen/v20120201/BRKLeveringImkadTypen_v1_1_0.xsd"/>
	<xs:import namespace="http://www.kadaster.nl/schemas/brk-levering/snapshot/v20120901" schemaLocation="../../snapshot/v20120901/BRKLeveringSnapshot_v1_1_4.xsd"/>
	<xs:element name="GemeenteGebaseerdeStand" type="GemeenteGebaseerdeStand:GemeenteGebaseerdeStand" abstract="false"/>
	<xs:complexType name="GemeenteGebaseerdeStand" abstract="false">
		<xs:annotation>
			<xs:documentation source="http://www.kadaster.nl/schema-info/technical-documentation">Definitie
Een BRK Stand kan gebaseerd worden op basis van verschillende selectiecriteria. Als eerste wordt de Gemeente Gebaseerde Stand ge�mplementeerd.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="BRKDatum" type="xs:date">
				<xs:annotation>
					<xs:documentation source="http://www.kadaster.nl/schema-info/technical-documentation">De (peil)datum waarmee de selectie van de stand uit de Basisregistratie Kadaster is uitgevoerd.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="naamBurgerlijkeGemeente" type="GemeenteGebaseerdeStand:WaardelijstBurgerlijkeGemeente">
				<xs:annotation>
					<xs:documentation source="http://www.kadaster.nl/schema-info/technical-documentation">De burgerlijke gemeente waarmee de selectie van de totaalstand uit de Basisregistratie Kadaster is uitgevoerd.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="stand" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="Snapshot:KadastraalObjectSnapshot" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="WaardelijstBurgerlijkeGemeente" type="GemeenteGebaseerdeStand:WaardelijstBurgerlijkeGemeente" abstract="false" substitutionGroup="Typen:Waardelijst"/>
	<xs:complexType name="WaardelijstBurgerlijkeGemeente" abstract="false">
		<xs:complexContent>
			<xs:extension base="Typen:Waardelijst">
				<xs:sequence/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>


 The object:
After deserialize:

object.stand[0]._KadastraalObject = null 

In the XSD we see a KadastraalObject:Perceel. If we look in the class we see Perceel (inherit from __OnroerendeZaak which inherits from _KadastraalObject).
But the object is never filled.

Here are our XSD2Code settings (only the changes)

 - CollectionObjectType = Array 
- GenerateXmlAttributes = true
- EnableVirtualProperties = true

 

Has anyone an idea how to solve this problem? 

Jan 23, 2013 at 9:42 AM

I believe I am seeing this same issue - can you look at the constructors in the generated code classes - what I see is in some cases Xsd2Code generaates a constructor that instantiates any sub classes - but in other cases there is no constructor at all even when the class does have some fields that are objects related to "lower" complex types in the XSD.  Obviously a constructor is not needed when the class only has simple types (which are then just simple fields in the class).

What makes this more confusing is that some classes have constructors to deal with their sub objects and others don't - I have not yet worked out why - I assume there is some sort of bug in the way Xsd2Code iterates through the complex types. THere may be some relationship to types being derived by extension or restriction from other types - I am still investigating.  My own XSD is a nasty complex mess provided by another organisation (who I could name and shame) so I need to create a test "smaller" XSD to see what is happening more clearly.

My initial workaround is to find the classes with object fields and no constructors and use a partial class in another code file to add the constructor required.

Jan 23, 2013 at 9:58 AM
Edited Jan 23, 2013 at 10:07 AM

Hello James,

 

Do you have an example of a classes which is wrong so i can check it with my classes.

And do you have a workaround example?

 

My file generate from XSD2Code is pretty large ~19000 lines of code.