C#:“表'sometable'不能成为嵌套关系中的子表。”

时间:2009-03-23 23:38:18

标签: c# web-services api httpwebrequest

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 "";   
}

上述方法基本上从LastFM's API Services之一检索xml文件。

现在,当使用ReadXml方法从xml填充数据集时,我面临以下异常

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


Here is an example正在检索的XML文件

请注意,XML文件中有一个嵌套的Artist,我显然认为这就是异常的原因。


我的问题,如何防止这种情况发生?关于嵌套表格

3 个答案:

答案 0 :(得分:3)

据我所知,DataSet不仅仅适用于任何类型的XML。在这种情况下你真的需要一个数据集吗?

我建议切换到linq 2 xml或XmlDocument来操作Web服务的结果。

答案 1 :(得分:1)

我认为Freddy的答案是有价值的,但您可以在调用ReadXml之前手动定义DataSet架构,而不是依赖于xml来定义架构。

您也可以尝试从GetResponse中分离ReadXml并在调用ReadXml之前执行xslt,即使模式与DataSet兼容。

远射...关闭DataSet.EnforceConstraints

答案 2 :(得分:0)