0

このコードで XE.COM から XML データを読み込んでいます

string url = ConfigurationManager.AppSettings[CONFIGURATION_KEY_XE_COM_URL];

System.Xml.Serialization.XmlSerializer ser =
new System.Xml.Serialization.XmlSerializer(typeof(xedatafeed));


// try XmlReader
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = null;
settings.DtdProcessing = DtdProcessing.Parse;
System.Xml.XmlReader reader = System.Xml.XmlReader.Create(url, settings);
string reply = (string)ser.Deserialize(reader);

// try WebClient
System.Net.WebClient client = new System.Net.WebClient();
string data = Encoding.UTF8.GetString(client.DownloadData(url));

問題は、この行

xedatafeed reply = (string)ser.Deserialize(xedatafeed);

例外をスローしています

<xe-datafeed xmlns=''> was not expected.

これを修正するにはどうすればよいですか?

4

2 に答える 2

0

この問題に非常に具体的な解決策を追加するだけで、一般的な解決策に対する@MarcGravellの回答をご覧ください。

> wget http://www.xe.com/datafeed/samples/sample-xml-usd.xml
> xsd sample-xml-usd.xml
// generating xsd, change xs:string to xs:decimal for crate and cinverse though
> xsd sample-xml-usd.xsd /classes
// now we have created sample-xml-usd.cs, c# classes representing the xml

最終的な C# コードは次のとおりです。

xedatafeed reply = null;

using (var wc = new WebClient()) // Catching exceptions is for pussies! :)
  reply = ParseXml<xedatafeed>(wc.DownloadString(uri));

次のメソッドが定義されています。

T ParseXml<T>(string data) {
  return (T) new XmlSerializer(typeof(T)).Deserialize(new StringReader(data));
}

私の推測ではLinqToXSD、その生成に問題があったと思います。

于 2013-09-12T13:24:55.237 に答える