如何从Web服务中取消XML的序列化
本文关键字:取消 XML 序列化 服务 Web | 更新日期: 2024-06-14 09:43:52
我正在开发一个系统,该系统将从web服务中获取汽车制造。此web服务将返回一个XML文件,如下所示。我想用c#把它序列化成一类Cars。然后,该类将被持久化到我的本地数据库中。我也想使用架构中的信息。做这件事的最佳方式是什么。
<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>
我认为,您可以使用DataSet
进行一些linq操作
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();