简体   繁体   English

如何从Web服务反序列化XML

[英]How do i deserialise an XML from a webservice

I am developing a system that will get car makes from a web service. 我正在开发一种系统,该系统将从Web服务获取汽车制造信息。 This web service will return an XML file like the one below. 该Web服务将返回一个XML文件,如下所示。 I want to serialise this into a class of Cars using c#. 我想使用c#将其序列化为Cars类。 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>

I think, you can make use of DataSet and do some linq operations 我认为,您可以利用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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM