xml을 개체로 deserialize하려고합니다. 하지만이 오류가 계속 발생합니다.
System.Xml.dll에서 System.InvalidOperationException '이 발생했습니다. 추가 정보 : XML 문서 (1, 1)에 오류가 있습니다.
이것은 역 직렬화에 사용하는 클래스입니다.
[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; }
}
나는 확실히 확인하는 것이 생각 Driver
과는 DriverTable
맞아,하지만 어쩌면 오류가에 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;
}
}
이 줄은 오류를 발생시킵니다.drivers=((ObservableCollection<DriverData>)serializer.Deserialize(reader));
XML 응답은 다음과 같습니다.
<?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>
오류를 수정하고 ObservableCollection을 반환하는 방법은 무엇입니까?
다음과 같은 여러 가지 문제가 있습니다.
단일 MRData
요소를 ObservableCollection<DriverData>
. 콜렉션이 아닙니다. 단일 개체에 대한 serializer를 만듭니다.
XmlSerializer serializer = new XmlSerializer(typeof(DriverData));
의 네임 스페이스를 무시 했습니다. 다음을 포함 MRData
하도록 XmlRoot
속성을 변경해야합니다 .
[XmlRoot("MRData", Namespace = "http://ergast.com/mrd/1.4")]
DriverTable
DriverData
클래스 정의 에서 누락되었습니다 . 또한 XmlElement
다른 모든 속성에 속성을 추가했습니다 . 이들은 속성 이 아니라 요소 , 그렇게해야 XmlAttribute
속성. 수정 된 전체 정의는 다음과 같습니다.
[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; }
}
Driver
유사하게 두 속성 에는 XmlElement
속성 대신 XmlAttribute
속성이 있습니다.
[XmlAttribute("driverId")]
public string driverId { get; set; }
[XmlAttribute("url")]
public string url { get; set; }
당신의 deserializer StringReader
는 읽는 것을 사용합니다 url
. 이것은 콘텐츠가 아니라 URI입니다. 다음과 같아야합니다.
using (TextReader reader = new StringReader(content))
https://dotnetfiddle.net/bkYr7Q 에서 작동하는 예를 참조하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다