2015-11-26 85 views
0

我在RestSharp的内置反序列化中遇到了一些麻烦。RestSharp的反序列化不起作用,C#序列化做

我的代码:

RestClient client = new RestClient("https://example.com/rest/"); 

client.ClearHandlers(); 
client.AddHandler("application/xml", new RestSharp.Deserializers.XmlDeserializer()); 

var request = new RestRequest(); 
request.Resource = "member/findScoutIdsForOrganization/{organizationId}"; 
request.AddUrlSegment("organizationId", orgId); 

var response = client.Execute<wsScoutIdList>(request); 
var scoutids = response.Data; 

XmlSerializer serializer = new XmlSerializer(typeof(wsScoutIdList)); 
var result = serializer.Deserialize(XmlReader.Create(new StringReader(response.Content))); 

wsScoutIdList.java:(由xsd2code产生++)

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.81.0")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlRootAttribute("ScoutIdList", Namespace="", IsNullable=false)] 
public partial class wsScoutIdList 
{ 

    private List<string> _list; 

    public wsScoutIdList() 
    { 
     this._list = new List<string>(); 
    } 

    [System.Xml.Serialization.XmlElementAttribute("list", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)] 
    public List<string> list 
    { 
     get 
     { 
      return this._list; 
     } 
     set 
     { 
      this._list = value; 
     } 
    } 
} 

XML:

<?xml version ="1.0" encoding="UTF-8" standalone="yes" ?> 
<ScoutIdList> 
    <list>id1</list> 
    <list>id2</list> 
    <list>id3</list> 
</ScoutIdList> 

的System.Xml.Serialization作品,但没有按RestSharp”吨。该列表简直是空的。

我也试过json,不工作。

回答

0

有几件事情:

你不需要这样的:

client.AddHandler("application/xml", new RestSharp.Deserializers.XmlDeserializer()); 

而是使用此:

request.RequestFormat = DataFormat.Xml; 

另外你如果参数不是在参数名称=的格式parameterValue你不能使用这个:

request.AddUrlSegment(“organizationId”,orgId);

相反只是这样做:如果你想使用默认的序列,你才可以删除

request.Resource = "member/findScoutIdsForOrganization/ + orgId"; 

这样的:

XmlSerializer serializer = new XmlSerializer(typeof(wsScoutIdList)); 

所以,你的代码应该是这样的:

RestClient client = new RestClient("https://example.com/rest/"); 

request.RequestFormat = DataFormat.Xml; 


var request = new RestRequest(); 
request.Resource = "member/findScoutIdsForOrganization/" + orgId; 

var response = client.Execute<wsScoutIdList>(request); 
var scoutids = response.Data; 

希望它有帮助

+0

'reque st.RequestFormat = DataFormat.Xml;'不起作用,它使用json然后 'request.AddUrlSegment(“organizationId”,orgId);'是推荐的方法,这没有什么错。 额外的'XmlSerializer'只是为了表明这个工作正常。 RestSharper方法已经在那里,并没有工作。 – filnko