Reputation: 15
I am developing a system that will get car makes from a web service. This web service will return an XML file like the one below. I want to serialise this into a class of Cars using c#. That class will then be persisted into my local database. I would also like to use the info in the schema. What would be the perfect way of doing that.
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='MMCode' rs:number='1' rs:writeunknown='true' rs:basecatalog='Vehicles' rs:basetable='Vehicle'
rs:basecolumn='MMCode' rs:keycolumn='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='8' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='VehicleType' rs:number='2' rs:writeunknown='true' rs:basecatalog='Vehicles' rs:basetable='Vehicle'
rs:basecolumn='Type_Code'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='1' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='Make' rs:number='3' rs:nullable='true' rs:writeunknown='true' rs:basecatalog='Vehicles'
rs:basetable='Make' rs:basecolumn='Name'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='Variant' rs:number='4' rs:nullable='true' rs:writeunknown='true' rs:basecatalog='Vehicles'
rs:basetable='Vehicle' rs:basecolumn='Name'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row MMCode='00250100' VehicleType='T' Make='ACO' Variant='100 (4) ADE' Cyl='' CubicCapacity='0' Kilowatts='100'
BodyType='' NoOfDoors='' FuelType='' FuelCapacity='' IntroDate='12/1997' DiscDate='' TareWeight='0' No_Seats='0'
GVM='0' Co2='' Code='002' c18='00250100' Year='2013' Month='5'/>
<z:row MMCode='00250101' VehicleType='T' Make='ACO' Variant='100 (4) ADE CAB' Cyl='' CubicCapacity='0' Kilowatts='100'
BodyType='' NoOfDoors='' FuelType='' FuelCapacity='' IntroDate='12/1997' DiscDate='7/1999' TareWeight='0' No_Seats='0'
GVM='0' Co2='' Code='002' c18='00250101' Year='2013' Month='5'/>
<z:row MMCode='00250160' VehicleType='T' Make='ACO' Variant='160 (4) CAB' Cyl='' CubicCapacity='0' Kilowatts='194'
BodyType='' NoOfDoors='' FuelType='' FuelCapacity='' IntroDate='12/1998' DiscDate='7/1999' TareWeight='0' No_Seats='0'
GVM='0' Co2='' Code='002' c18='00250160' Year='2013' Month='5'/>
</rs:data>
</xml>
Upvotes: 0
Views: 141
Reputation: 116178
I think, you can make use of DataSet
and do some linq operations
DataSet ds = new DataSet();
ds.ReadXml(filename); //or ds.ReadXml(stream)
var tbl = ds.Tables.Cast<DataTable>().Last();
var rows = tbl.Rows.Cast<DataRow>()
.Select(row => row.ItemArray)
.Select(arr => arr.Select((item, inx) => new {item,inx })
.ToDictionary(y => tbl.Columns[y.inx], y => y.item))
.ToList();
Upvotes: 1