2015-11-26 4 views
0

У меня есть некоторые проблемы с встроенной десериализацией RestSharp.Deserialization 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

Смежные вопросы