2009-03-23 4 views
1
public string GetArtistThumbnail(string artistName) 
{ 
    var request = 
     WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=" + artistName + 
     "&api_key=" + 
     APIKey) as HttpWebRequest; 

    using (var response = request.GetResponse() as HttpWebResponse) 
    { 
     var ds = new DataSet(); 
     ds.ReadXml(response.GetResponseStream()); // <-- Exception is thrown here 
    } 

    return ""; 
} 

Die obige Methode ruft im Grunde eine XML-Datei aus einem LastFM's API Services.C#: "Die Tabelle 'someable' kann in verschachtelten Relationen nicht die untergeordnete Tabelle für sich selbst sein."

Nun bin ich mit Blick auf die folgenden Ausnahme, wenn die Datenmenge aus der XML mit dem ReadXml Methode Füllung:

The table (artist) cannot be the child table to itself in nested relations.


Here is an example einer XML-Datei, die abgerufen wird

Beachten Sie, dass eine verschachtelte Artist in der XML-Datei ist, und ich vermute natürlich, dass dies der Grund für die Ausnahme ist.


Meine Frage, wie kann ich das verhindern? Was die verschachtelten Tabellen angeht

Antwort

3

Soweit ich weiß, sind DataSets nicht dazu gedacht, irgendeine Art von XML zu speichern. Brauchen Sie in diesem Fall wirklich einen Datensatz?

Ich schlage vor, zu linq 2 xml oder XmlDocument zu wechseln, um die Ergebnisse des Webdienstes zu manipulieren.

+0

Switched zu verwenden –

1

Ich denke, Freddy's Antwort hat seinen Wert, aber Sie können möglicherweise das DataSet-Schema manuell definieren, bevor ReadXml aufgerufen wird, anstatt sich auf das XML zu verlassen, um das Schema zu definieren.

Sie können auch versuchen, ReadXml von GetResponse zu trennen und eine XSLT ausführen, bevor ReadXml aufgerufen wird, d. H. Das Schema mit einem DataSet kompatibel machen.

Langer Schuss ... drehen DataSet.EnforceConstraints