如何创建我的C锋利的物体,以配合我RestSharp XML响应? [英] How do I create my c sharp object to match my RestSharp XML response?

查看:160
本文介绍了如何创建我的C锋利的物体,以配合我RestSharp XML响应?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚开始RestSharp工作,并使用NextFlix API已经能够从Netflix的成功创建我的Oauth令牌和请求数据。但出于某种原因,我似乎无法创建我的对象,以正确匹配返回XML



我的代码:

  VAR客户端2 =新RESTClient实现(http://api-public.netflix.com)
{
的Authenticator = OAuth1Authenticator.ForProtectedResource(MyOauth.ConsumerKey, MyOauth.ConsumerSecret,MyOauth.OauthToken,MyOauth.OauthTokenSecret)
};

变种要求=新RestRequest(/目录/标题/自动完成);
request.AddParameter(术语,星球大战);
变种的SearchResult = client2.Execute< CatalogList>(请求);



我试图创建对象:

  [XmlRoot(自动完成)] 
公共类CatalogList
{
公开名单< AutoCompleteItem>标题{搞定;组; }
}

[XmlRoot(autocomplete_item)]
公共类AutoCompleteItem
{
[的XmlElement(称号短)]
酒店的公共字符串名称{搞定;组; }

[的XmlElement(空头)]
公共字符串SHORTNAME {搞定;组; }
}



serachresults返回20个标题,我的表有20个条目,但是AutoCompleteItem是总是空的。我已经改变了元素的名称,属性等,但从来没有得到正确的组合



这将返回看起来像XML:

 <?XML版本=1.0独立=YES>?; 
<自动完成>
< url_template> HTTP://api-public.netflix.com/catalog/titles/autocomplete {-join |&放大器; |长期}< / url_template>?
< autocomplete_item>
<短标题=星球大战前传II:克隆人的进攻/>
< / autocomplete_item>



我缺少的是在这里吗?



谢谢,



杰森


解决方案

  [XmlRoot(自动完成)] 
公共类AutocompleteList
{
[的XmlElement(url_template)]
公共字符串UrlTemplate {搞定;组; }

[的XmlElement(autocomplete_item)]
公开名单< AutocompleteItem>项目{搞定;组; }
}

公共类AutocompleteItem
{
[的XmlElement(称号)]
题目ItemTitle {搞定;组; }
}

公共类标题
{
[XmlAttribute(空头)]
公共字符串短{搞定;组; }
}



标题类型是必要的,以便能够捕捉到XML属性短=

 字符串XML = @< XML版本=?,1.0,独立=是> 
<自动完成>
< url_template>的http:// API - public.netflix.com/catalog/titles/autocomplete?{-join|&amp;|term}</url_template>
< autocomplete_item>
<短标题=星球大战:第二集:克隆人的进攻/>
< / autocomplete_item>
< /自动完成>中;

变种读卡器=新StringReader(XML);
变种SER =新的XmlSerializer(typeof运算(AutocompleteList));

VAR的结果=(AutocompleteList)ser.Deserialize(读卡器);

这产生相同的结果为



  VAR的结果=新AutocompleteList 
{
UrlTemplate =http://api-public.netflix.com/catalog/titles/autocomplete?{-join|& |长期},
项=新的List< AutocompleteItem>
{
新AutocompleteItem
{
ItemTitle =新标题
{
短=星球大战前传II:克隆人的进攻,
}
},
},
}


I just started to work with RestSharp and using the NextFlix API have been able to successfully create my Oauth tokens and request data from NetFlix. But for some reason I can not seem to create my objects to match the return XML correctly.

My code:

    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);

My attempted object creation:

  [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 returns 20 titles and my List has 20 entries, however the AutoCompleteItem is always empty. I've changed up the element names, attributes etc but never get the right combination.

The XML that is returned looks like:

<?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>

What am I missing here?

Thanks,

Jason

解决方案

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

The inner Title type is necessary to be able to capture the XML attribute 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);

This produces the same result as

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

这篇关于如何创建我的C锋利的物体,以配合我RestSharp XML响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆