繁体   English   中英

如何创建c尖锐对象以匹配RestSharp XML响应?

[英]How do I create my c sharp object to match my RestSharp XML response?

我刚刚开始使用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>

我在这里想念什么?

谢谢,

杰森

[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",
            }
        },
    },
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM