2016-11-11 53 views
1

當我做使用通話ressharp習慣於RestSharp deserializator的反序列化響應

response = client.Execute<SomeClass>(request); 

我需要知道這裏面用解串器restsharp反序列化這種性反應。 我知道restsharp根據服務器返回的內容類型確定反序列化器。

我需要的是這樣的

var deserializator = responce.GetUsedDeserializator(); 

甚至

var deserializator = restclient.GetDeserializatorForContentType(responce.ContentType) 

回答

0

Thereisn't簡單的方式做後援唯一的辦法,我發現被提取restsharp源代碼。

public static class RestSharpExtensions 
{ 
    private static readonly Regex structuredSyntaxSuffixRegex = new Regex("\\+\\w+$", RegexOptions.Compiled); 

    private static Dictionary<string, IDeserializer> contentTypeToDeserializerMap = new Dictionary 
     <string, IDeserializer> 
    { 
     {"application/json", new JsonDeserializer()}, 
     {"application/xml", new XmlDeserializer()}, 
     {"text/json", new JsonDeserializer()}, 
     {"text/x-json", new JsonDeserializer()}, 
     {"text/javascript", new JsonDeserializer()}, 
     {"text/xml", new XmlDeserializer()}, 
     {"*+json", new JsonDeserializer()}, 
     {"*+xml", new XmlDeserializer()}, 
     {"*", new XmlDeserializer()} 
    }; 


    public static IDeserializer GetDeserializer(this IRestResponse restResponse) 
    { 
     var contentType = restResponse.ContentType; 
     if (contentType == null) 
      throw new ArgumentNullException("contentType"); 
     if (string.IsNullOrEmpty(contentType) && contentTypeToDeserializerMap.ContainsKey("*")) 
      return contentTypeToDeserializerMap["*"]; 
     int length = contentType.IndexOf(';'); 
     if (length > -1) 
      contentType = contentType.Substring(0, length); 
     if (contentTypeToDeserializerMap.ContainsKey(contentType)) 
      return contentTypeToDeserializerMap[contentType]; 
     Match match = structuredSyntaxSuffixRegex.Match(contentType); 
     if (match.Success) 
     { 
      string key = "*" + match.Value; 
      if (contentTypeToDeserializerMap.ContainsKey(key)) 
       return contentTypeToDeserializerMap[key]; 
     } 
     if (contentTypeToDeserializerMap.ContainsKey("*")) 
      return contentTypeToDeserializerMap["*"]; 
     return (IDeserializer)null; 
    } 

}