RestSharp:如何将XmlDeserializer这个响应?

时间:2016-05-11 20:25:33

标签: c# restsharp

请注意,在存储库列表之前还有额外的存储库和数据标记。我使用NexusRepo类来建模repositories-item,但收到此错误:

Exception caught: System.ApplicationException: Error retrieving response.  Check inner details for more info. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at RestSharp.Deserializers.XmlDeserializer.HandleListDerivative(XElement root, String propName, Type type)
   at RestSharp.Deserializers.XmlDeserializer.Deserialize[T](IRestResponse response)
   at RestSharp.RestClient.Deserialize[T](IRestRequest request, IRestResponse raw)
   --- End of inner exception stack trace ---

enter image description here

public List<NexusRepo> GetAllRepos()    
{
    RestRequest request = new RestRequest();
    //RestRequest request = new RestRequest("/repositories", Method.GET);
    request.Resource = "/repositories";
    request.RootElement = "NexusRepo";

    return this.restSharpAPI.Execute<List<NexusRepo>>(this.client, request);

}

public class NexusRepo
{
    public string name { get; set; }
    public string format { get; set; }
    public string resourceURI { get; set; }

    public override string ToString()
    {
        string s = "name=" + name + "format=" + format + "resourceURI=" + resourceURI;
        return s;
    }
}

2 个答案:

答案 0 :(得分:0)

问题是NexusRepo类名与repositories-item节点名不同。您可以添加[DeserializeAs]属性来解决它:

[DeserializeAs(Name = "repositories-item")]
public class NexusRepo

或者您可以重命名类或节点以满足以下条件之一:

  

在搜索匹配元素的数据时,使用默认XML   反序列化器将在下面查找元素和属性   顺序:

     
      
  • 具有完全匹配名称的元素
  •   
  • 名称与小写属性名称匹配的元素
  •   
  • 名称与camel-cased属性名称匹配的元素
  •   
  • 从名称
  • 中删除了下划线和短划线的元素   
  • 具有完全匹配名称的属性
  •   
  • 名称与小写属性名称匹配的属性
  •   
  • 名称与camel-cased属性名称相匹配的属性
  •   
  • 从名称
  • 中删除下划线和短划线的属性   

official docs中所述。

答案 1 :(得分:0)

它适用于我:

  1. 添加了属性
  2. 使用RestSharp.Deserializers添加;
  3. 注释掉下面的RootElement行。

    // request.RootElement =&#34; NexusRepo&#34;;