0

RestSharpの使用を開始したばかりで、NextFlix APIを使用して、Oauthトークンを正常に作成し、NetFlixにデータを要求することができました。しかし、何らかの理由で、返されるXMLに正しく一致するオブジェクトを作成できないようです。

私のコード:

    var client2 = new RestClient("http://api-public.netflix.com")
        {
            Authenticator = OAuth1Authenticator.ForProtectedResource(MyOauth.ConsumerKey, MyOauth.ConsumerSecret, MyOauth.OauthToken, MyOauth.OauthTokenSecret)
        };

        var request = new RestRequest("/catalog/titles/autocomplete");
        request.AddParameter("term", "star wars");
        var searchResults = client2.Execute<CatalogList>(request);

私が試みたオブジェクトの作成:

  [XmlRoot("autocomplete")]
    public class CatalogList
    {
        public List<AutoCompleteItem> Titles { get; set; }
    }

    [XmlRoot("autocomplete_item")]
    public class AutoCompleteItem
    {
        [XmlElement("title short")]
        public string Title { get; set; }

        [XmlElement("short")]
        public string ShortName { get; set; }
    }

serachresultsは20のタイトルを返し、私のリストには20のエントリがありますが、AutoCompleteItemは常に空です。要素名、属性などを変更しましたが、正しい組み合わせが得られません。

返されるXMLは次のようになります。

<?xml version="1.0" standalone="yes" ?> 
<autocomplete>
<url_template>http://api-public.netflix.com/catalog/titles/autocomplete?{-join|&|term}   </url_template> 
<autocomplete_item>
<title short="Star Wars: Episode II: Attack of the Clones" /> 
</autocomplete_item>

ここで何が欠けていますか?

ありがとう、

ジェイソン

4

1 に答える 1

0
[XmlRoot("autocomplete")]
public class AutocompleteList
{
    [XmlElement("url_template")]
    public string UrlTemplate { get; set; }

    [XmlElement("autocomplete_item")]
    public List<AutocompleteItem> Items { get; set; }
}

public class AutocompleteItem
{
    [XmlElement("title")]
    public Title ItemTitle { get; set; }
}

public class Title
{
    [XmlAttribute("short")]
    public string Short { get; set; }
}

内部Title型は、XML属性をキャプチャできるようにするために必要ですshort=

string xml = @"<?xml version=""1.0"" standalone=""yes"" ?>
<autocomplete>
    <url_template>http://api-public.netflix.com/catalog/titles/autocomplete?{-join|&amp;|term}</url_template>
    <autocomplete_item>
        <title short=""Star Wars: Episode II: Attack of the Clones"" />
    </autocomplete_item>
</autocomplete>";

var reader = new StringReader(xml);
var ser = new XmlSerializer(typeof(AutocompleteList));

var result = (AutocompleteList) ser.Deserialize(reader);

これは、と同じ結果を生成します

var result = new AutocompleteList
{
    UrlTemplate = "http://api-public.netflix.com/catalog/titles/autocomplete?{-join|&|term}",
    Items = new List<AutocompleteItem>
    {
        new AutocompleteItem
        {
            ItemTitle = new Title
            {
                Short = "Star Wars: Episode II: Attack of the Clones",
            }
        },
    },
}
于 2012-09-14T18:06:47.290 に答える