如何从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>

如何从Web服务中取消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();