2012-09-14 40 views
0

我剛開始使用RestSharp,並且使用NextFlix API能夠成功創建我的Oauth令牌並從NetFlix請求數據。但由於某種原因,我似乎無法創建我的對象來正確匹配返回XML。如何創建我的c sharp對象以匹配我的RestSharp 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> 

缺少什麼我在這裏?

謝謝,

傑森

回答

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", 
      } 
     }, 
    }, 
} 
+0

我現在得到的URL模板,但ItemTitle(其中所有20個),顯示爲空。是否有可能RestSharp解串器無法正常工作,我需要自己做?還是該對象需要調整?感謝您的幫助.. – Jason

+0

當您手動反序列化xml時,您的代碼可以正常工作..我想我只想去那條路線。不知道爲什麼RestSharp不能使用它。可能是用戶錯誤,我確定。但再次感謝。 – Jason

相關問題