c# - Deserialize xml to objects -


i'm trying deserialize xml objects. keep getting error:

system.invalidoperationexception' occurred in system.xml.dll additional information: xml-document (1, 1) contains error.

this class use deserialisation

[xmlroot("mrdata")] public class driverdata {     [xmlelement("series")]     public string series { get; set; }      [xmlelement("url")]     public string url { get; set; }      [xmlelement("limit")]     public int limit { get; set; }      [xmlelement("offset")]     public int offset { get; set; }      [xmlelement("total")]     public int total { get; set; } }   [xmlroot("drivertable")] public class drivertable {     [xmlelement("driver")]     public list<driver> drivers { get; set; } }  public class driver {     [xmlelement("driverid")]     public string driverid { get; set; }      [xmlelement("url")]     public string url { get; set; }      [xmlelement("givenname")]     public string givenname { get; set; }      [xmlelement("familyname")]     public string familyname { get; set; }      [xmlelement("dateofbirth")]     public datetime dateofbirth { get; set; }      [xmlelement("nationality")]     public string nationality { get; set; }  } 

i quite sure driver , drivertable right, maybe error in driverdata?

class racingapiclient {     public observablecollection<driverdata> getdrivers()     {         var url = "http://ergast.com/api/f1/drivers";          observablecollection<driverdata> drivers = new observablecollection<driverdata>();          // syncronious comsumption         var syncclient = new webclient();         var content = syncclient.downloadstring(url);          xmlserializer serializer = new xmlserializer(typeof(observablecollection<driverdata>));          using (textreader reader = new stringreader(url))         {             drivers = ((observablecollection<driverdata>)serializer.deserialize(reader));         }         return drivers;     } } 

this line throws error:drivers=((observablecollection<driverdata>)serializer.deserialize(reader));

the xml response is:

<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="http://ergast.com/schemas/mrd-1.4.xsl"?> <mrdata xmlns="http://ergast.com/mrd/1.4" series="f1" url="http://ergast.com/api/f1/drivers" limit="30" offset="0" total="833">     <drivertable>         <driver driverid="abate" url="http://en.wikipedia.org/wiki/carlo_mario_abate">             <givenname>carlo</givenname>             <familyname>abate</familyname>             <dateofbirth>1932-07-10</dateofbirth>             <nationality>italian</nationality>         </driver>         <driver driverid="abecassis" url="http://en.wikipedia.org/wiki/george_abecassis">             <givenname>george</givenname>             <familyname>abecassis</familyname>             <dateofbirth>1913-03-21</dateofbirth>             <nationality>british</nationality>         </driver>         <driver driverid="acheson" url="http://en.wikipedia.org/wiki/kenny_acheson">             <givenname>kenny</givenname>             <familyname>acheson</familyname>             <dateofbirth>1957-11-27</dateofbirth>             <nationality>british</nationality>         </driver>         <driver driverid="adams" url="http://en.wikipedia.org/wiki/philippe_adams">             <givenname>philippe</givenname>             <familyname>adams</familyname>             <dateofbirth>1960-11-19</dateofbirth>             <nationality>belgian</nationality>         </driver>         <driver driverid="ader" url="http://en.wikipedia.org/wiki/walt_ader">             <givenname>walt</givenname>             <familyname>ader</familyname>             <dateofbirth>1912-12-15</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="adolff" url="http://en.wikipedia.org/wiki/kurt_adolff">             <givenname>kurt</givenname>             <familyname>adolff</familyname>             <dateofbirth>1921-11-05</dateofbirth>             <nationality>german</nationality>         </driver>         <driver driverid="agabashian" url="http://en.wikipedia.org/wiki/fred_agabashian">             <givenname>fred</givenname>             <familyname>agabashian</familyname>             <dateofbirth>1913-08-21</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="ahrens" url="http://en.wikipedia.org/wiki/kurt_ahrens,_jr.">             <givenname>kurt</givenname>             <familyname>ahrens</familyname>             <dateofbirth>1940-04-19</dateofbirth>             <nationality>german</nationality>         </driver>         <driver driverid="albers" code="alb" url="http://en.wikipedia.org/wiki/christijan_albers">             <givenname>christijan</givenname>             <familyname>albers</familyname>             <dateofbirth>1979-04-16</dateofbirth>             <nationality>dutch</nationality>         </driver>         <driver driverid="alboreto" url="http://en.wikipedia.org/wiki/michele_alboreto">             <givenname>michele</givenname>             <familyname>alboreto</familyname>             <dateofbirth>1956-12-23</dateofbirth>             <nationality>italian</nationality>         </driver>         <driver driverid="alesi" url="http://en.wikipedia.org/wiki/jean_alesi">             <givenname>jean</givenname>             <familyname>alesi</familyname>             <dateofbirth>1964-06-11</dateofbirth>             <nationality>french</nationality>         </driver>         <driver driverid="alguersuari" code="alg" url="http://en.wikipedia.org/wiki/jaime_alguersuari">             <givenname>jaime</givenname>             <familyname>alguersuari</familyname>             <dateofbirth>1990-03-23</dateofbirth>             <nationality>spanish</nationality>         </driver>         <driver driverid="alliot" url="http://en.wikipedia.org/wiki/philippe_alliot">             <givenname>philippe</givenname>             <familyname>alliot</familyname>             <dateofbirth>1954-07-27</dateofbirth>             <nationality>french</nationality>         </driver>         <driver driverid="allison" url="http://en.wikipedia.org/wiki/cliff_allison">             <givenname>cliff</givenname>             <familyname>allison</familyname>             <dateofbirth>1932-02-08</dateofbirth>             <nationality>british</nationality>         </driver>         <driver driverid="alonso" code="alo" url="http://en.wikipedia.org/wiki/fernando_alonso">             <permanentnumber>14</permanentnumber>             <givenname>fernando</givenname>             <familyname>alonso</familyname>             <dateofbirth>1981-07-29</dateofbirth>             <nationality>spanish</nationality>         </driver>         <driver driverid="amati" url="http://en.wikipedia.org/wiki/giovanna_amati">             <givenname>giovanna</givenname>             <familyname>amati</familyname>             <dateofbirth>1962-07-20</dateofbirth>             <nationality>italian</nationality>         </driver>         <driver driverid="amick" url="http://en.wikipedia.org/wiki/red_amick">             <givenname>red</givenname>             <familyname>amick</familyname>             <dateofbirth>1929-01-19</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="george_amick" url="http://en.wikipedia.org/wiki/george_amick">             <givenname>george</givenname>             <familyname>amick</familyname>             <dateofbirth>1924-10-24</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="amon" url="http://en.wikipedia.org/wiki/chris_amon">             <givenname>chris</givenname>             <familyname>amon</familyname>             <dateofbirth>1943-07-20</dateofbirth>             <nationality>new zealander</nationality>         </driver>         <driver driverid="anderson" url="http://en.wikipedia.org/wiki/bob_anderson_(racing_driver)">             <givenname>bob</givenname>             <familyname>anderson</familyname>             <dateofbirth>1931-05-19</dateofbirth>             <nationality>british</nationality>         </driver>         <driver driverid="andersson" url="http://en.wikipedia.org/wiki/conny_andersson">             <givenname>conny</givenname>             <familyname>andersson</familyname>             <dateofbirth>1939-12-28</dateofbirth>             <nationality>swedish</nationality>         </driver>         <driver driverid="andretti" url="http://en.wikipedia.org/wiki/michael_andretti">             <givenname>michael</givenname>             <familyname>andretti</familyname>             <dateofbirth>1962-10-02</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="mario_andretti" url="http://en.wikipedia.org/wiki/mario_andretti">             <givenname>mario</givenname>             <familyname>andretti</familyname>             <dateofbirth>1940-02-28</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="andrews" url="http://en.wikipedia.org/wiki/keith_andrews_(driver)">             <givenname>keith</givenname>             <familyname>andrews</familyname>             <dateofbirth>1920-06-15</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="apicella" url="http://en.wikipedia.org/wiki/marco_apicella">             <givenname>marco</givenname>             <familyname>apicella</familyname>             <dateofbirth>1965-10-07</dateofbirth>             <nationality>italian</nationality>         </driver>         <driver driverid="armi" url="http://en.wikipedia.org/wiki/frank_armi">             <givenname>frank</givenname>             <familyname>armi</familyname>             <dateofbirth>1918-10-12</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="arnold" url="http://en.wikipedia.org/wiki/chuck_arnold">             <givenname>chuck</givenname>             <familyname>arnold</familyname>             <dateofbirth>1926-05-30</dateofbirth>             <nationality>american</nationality>         </driver>         <driver driverid="arnoux" url="http://en.wikipedia.org/wiki/ren%c3%a9_arnoux">             <givenname>rené</givenname>             <familyname>arnoux</familyname>             <dateofbirth>1948-07-04</dateofbirth>             <nationality>french</nationality>         </driver>         <driver driverid="arundell" url="http://en.wikipedia.org/wiki/peter_arundell">             <givenname>peter</givenname>             <familyname>arundell</familyname>             <dateofbirth>1933-11-08</dateofbirth>             <nationality>british</nationality>         </driver>         <driver driverid="ascari" url="http://en.wikipedia.org/wiki/alberto_ascari">             <givenname>alberto</givenname>             <familyname>ascari</familyname>             <dateofbirth>1918-07-13</dateofbirth>             <nationality>italian</nationality>         </driver>     </drivertable> </mrdata> 

how fix error, , return observablecollection?

you have number of issues:

  1. you trying deserialize single mrdata element observablecollection<driverdata>. isn't colllection. create serializer single object:

    xmlserializer serializer = new xmlserializer(typeof(driverdata)); 
  2. you have ignored namespace mrdata, need change xmlroot attribute include this:

    [xmlroot("mrdata", namespace = "http://ergast.com/mrd/1.4")] 
  3. drivertable missing driverdata class definition. have added xmlelement attributes other properties. these attributes, not elements, should have xmlattribute attributes. complete corrected definition is:

    [xmlroot("mrdata", namespace = "http://ergast.com/mrd/1.4")] public class driverdata {     [xmlattribute("series")]     public string series { get; set; }      [xmlattribute("url")]     public string url { get; set; }      [xmlattribute("limit")]     public int limit { get; set; }      [xmlattribute("offset")]     public int offset { get; set; }      [xmlattribute("total")]     public int total { get; set; }      [xmlelement("drivertable")]     public drivertable drivertable { get; set; } } 
  4. two properties on driver have xmlelement attributes instead of xmlattribute attributes:

    [xmlattribute("driverid")] public string driverid { get; set; }  [xmlattribute("url")] public string url { get; set; } 
  5. your deserializer uses stringreader reading url. uri , not content. should be:

    using (textreader reader = new stringreader(content)) 

see working example here: https://dotnetfiddle.net/bkyr7q


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -