I have the following xml elemnt:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<os:FeatureCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hwtn="http://namespaces.os.uk/mastermap/highwaysWaterTransportNetwork/1.0" xmlns:net="http://inspire.ec.europa.eu/schemas/net/4.0" xmlns:base="http://inspire.ec.europa.eu/schemas/base/3.3" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gn="http://inspire.ec.europa.eu/schemas/gn/4.0" xmlns:tn-w="http://inspire.ec.europa.eu/schemas/tn-w/4.0" xmlns:tn="http://inspire.ec.europa.eu/schemas/tn/4.0" xmlns:gmlxbt="http://www.opengis.net/gml/3.3/xbt" xmlns:os="http://namespaces.os.uk/product/1.0" xmlns:highway="http://namespaces.os.uk/mastermap/highwayNetwork/2.0" xmlns:base2="http://inspire.ec.europa.eu/schemas/base2/2.0" xmlns:ad="http://inspire.ec.europa.eu/schemas/ad/4.0" xmlns:au="http://inspire.ec.europa.eu/schemas/au/4.0" xmlns:bu-base="http://inspire.ec.europa.eu/schemas/bu-base/4.0" xmlns:sc="http://www.interactive-instruments.de/ShapeChange/AppInfo" xmlns:cp="http://inspire.ec.europa.eu/schemas/cp/4.0" xmlns:am="http://inspire.ec.europa.eu/schemas/am/4.0" xmlns:su-core="http://inspire.ec.europa.eu/schemas/su-core/4.0" xmlns:gmlexr="http://www.opengis.net/gml/3.3/exr" xmlns:tn-ro="http://inspire.ec.europa.eu/schemas/tn-ro/4.0" xmlns:network="http://namespaces.os.uk/mastermap/generalNetwork/2.0" xmlns:ram="http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0" xsi:schemaLocation="http://namespaces.os.uk/mastermap/highwaysWaterTransportNetwork/1.0 https://www.ordnancesurvey.co.uk/xml/schema/highwaysnetwork/1.0/HighwaysWaterTransportNetwork.xsd http://namespaces.os.uk/mastermap/highwayNetwork/2.0 https://www.ordnancesurvey.co.uk/xml/schema/highwaysnetwork/2.0/LinearHighwayNetwork.xsd http://namespaces.os.uk/product/1.0 https://www.ordnancesurvey.co.uk/xml/schema/product/1.0/OSProduct.xsd http://namespaces.os.uk/mastermap/generalNetwork/2.0 https://www.ordnancesurvey.co.uk/xml/schema/network/2.0/generalNetwork.xsd http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0 https://www.ordnancesurvey.co.uk/xml/schema/highwaysnetwork/2.0/RoutingAndAssetManagement.xsd" gml:id="OS_HIGHWAYS">
<os:metadata xlink:href="https://www.ordnancesurvey.co.uk/xml/products/Highways.xml"/>
<os:featureMember>
<ram:TurnRestriction gml:id="osgb4000000031265199">
<gml:identifier codeSpace="http://inspire.jrc.ec.europa.eu/ids">http://data.os.uk/id/4000000031265199</gml:identifier>
<net:networkRef>
<net:LinkReference>
<net:element xlink:href="#osgb4000000030462832"/>
<net:applicableDirection xlink:title="in opposite direction" xlink:href="http://inspire.ec.europa.eu/codelist/LinkDirectionValue/inOppositeDirection"/>
</net:LinkReference>
</net:networkRef>
<net:networkRef>
<net:LinkReference>
<net:element xlink:href="#osgb4000000030462831"/>
<net:applicableDirection xlink:title="in opposite direction" xlink:href="http://inspire.ec.europa.eu/codelist/LinkDirectionValue/inOppositeDirection"/>
</net:LinkReference>
</net:networkRef>
<net:inspireId>
<base:Identifier>
<base:localId>4000000031265199</base:localId>
<base:namespace>http://data.os.uk/</base:namespace>
</base:Identifier>
</net:inspireId>
<net:beginLifespanVersion>2016-06-17T00:00:00.000</net:beginLifespanVersion>
<tn:validFrom nilReason="unknown" xsi:nil="true"/>
<ram:restriction codeSpace="http://www.os.uk/xml/codelists/highways/TurnRestrictionValue.xml">No Turn</ram:restriction>
<ram:reasonForChange codeSpace="http://www.os.uk/xml/codelists/ChangeTypeValue.xml">New</ram:reasonForChange>
</ram:TurnRestriction>
</os:featureMember>
</os:FeatureCollection>
and C# class is
[XmlArray(Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
[XmlArrayItem("LinkReference", IsNullable = false)]
public networkRefLinkReference[] networkRef {get; set;}
which has been created by XSD /c.
But When I use XmlSerializer.Deserialize to transfer XML to object, it just loads one networkRef.
I have changed the first attribute to the following and it does not work too.
[XmlArray("networkRef", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
================== Edited ====== Add new class structure based on jdweng comment but still not getting result.
[System.CodeDom.Compiler.GeneratedCode("xsd", "4.6.1055.0")]
[System.Serializable]
[System.Diagnostics.DebuggerStepThrough]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0")]
[XmlRoot(Namespace = "http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0", IsNullable = false)]
public class TurnRestriction
{
[XmlElement(Namespace = "http://www.opengis.net/gml/3.2", IsNullable = true)]
public identifier identifier { get; set; }
[XmlElement("networkRef", IsNullable = true)]
public NetworkRef[] NetworkRefs { get; set; }
[XmlElement(Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
public inspireId inspireId { get; set; }
[XmlElement("restriction", IsNullable = true)]
public TurnRestrictionRestriction[] Restriction { get; set; }
public string id { get; set; }
}
[System.CodeDom.Compiler.GeneratedCode("xsd", "4.6.1055.0")]
[System.Serializable]
[System.Diagnostics.DebuggerStepThrough]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
[XmlRoot(Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0", IsNullable = false)]
public class networkRef
{
[XmlElement("LinkReference")]
public networkRefLinkReference LinkReference { get; set; }
}
The code below works
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication49
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlSerializer serializer = new XmlSerializer(typeof(FeatureCollection));
StreamReader reader = new StreamReader(FILENAME);
FeatureCollection collection = (FeatureCollection)serializer.Deserialize(reader);
}
}
[XmlRoot(ElementName = "FeatureCollection", Namespace = "http://namespaces.os.uk/product/1.0", IsNullable = false)]
public class FeatureCollection
{
[XmlElement(ElementName = "metadata", Namespace = "http://namespaces.os.uk/product/1.0")]
public Metadata metadata { get; set;}
[XmlElement(ElementName = "featureMember", Namespace = "http://namespaces.os.uk/product/1.0", IsNullable = false)]
public FeatureMember featureMember { get; set; }
}
[XmlRoot(ElementName = "metadata", Namespace = "http://namespaces.os.uk/product/1.0", IsNullable = false)]
public class Metadata
{
}
[XmlRoot(ElementName = "featureMember", Namespace = "http://namespaces.os.uk/product/1.0", IsNullable = false)]
public class FeatureMember
{
[XmlElement(ElementName = "TurnRestriction", Namespace = "http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0", IsNullable = false)]
public TurnRestriction turnRestriction { get; set; }
}
[XmlRoot(ElementName = "TurnRestriction", Namespace = "http://namespaces.os.uk/mastermap/routingAndAssetManagement/2.0", IsNullable = false)]
public class TurnRestriction
{
[XmlElement(ElementName = "identifier", Namespace = "http://www.opengis.net/gml/3.2", IsNullable = false)]
public Identifier identifier { get; set; }
[XmlElement(ElementName = "networkRef", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
public NetworkRef[] networkRef { get; set; }
}
[XmlRoot(ElementName = "identifier", Namespace = "http://www.opengis.net/gml/3.2", IsNullable = false)]
public class Identifier
{
}
[XmlRoot(ElementName = "networkRef", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0", IsNullable = false)]
public class NetworkRef
{
[XmlElement("LinkReference", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
public LinkReference linkReference { get; set; }
}
[XmlRoot(ElementName = "LinkReference", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0", IsNullable = false)]
public class LinkReference
{
[XmlElement("element", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0")]
public Element element { get; set; }
}
[XmlRoot(ElementName = "element", Namespace = "http://inspire.ec.europa.eu/schemas/net/4.0", IsNullable = false)]
public class Element
{
}
}