2016-11-11 1 views
1

의 직렬화 복원에 사용하기. restsharp가 서버에서 반환 한 내용 유형을 기반으로 디시리얼라이저를 결정한다는 것을 알고 있습니다.내가 전화 사용 ressharp</p> 내가 디시리얼라이저 restsharp이 responce를 역 직렬화하기 위해 내부에 사용되는 알 필요가 <pre><code>response = client.Execute<SomeClass>(request); </code></pre> <p>을 할 때 RestSharp의 deserializator 응답

나는 유일한 방법은 내가 restsharp 소스 코드를 추출한다 발견을 좋았지을이

var deserializator = responce.GetUsedDeserializator(); 

또는

var deserializator = restclient.GetDeserializatorForContentType(responce.ContentType) 

답변

0

Thereisn't 간단한 방법 같은 것을해야합니다.

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

} 
관련 문제