[英]Get RestSharp deserializator used for deserializing response
When I make call using ressharp 当我使用ressharp拨打电话时
response = client.Execute<SomeClass>(request);
I need to know which deserializer restsharp used inside to deserialize this responce. 我需要知道里面使用哪个deserializer restsharp来反序列化这个响应。 I know that restsharp determine deserializer based on the Content Type returned by the server.
我知道restsharp会根据服务器返回的内容类型确定反序列化程序。
I need something like this 我需要这样的东西
var deserializator = responce.GetUsedDeserializator();
or even 甚至
var deserializator = restclient.GetDeserializatorForContentType(responce.ContentType)
Thereisn't simple way to do it.The only way I found is extracting restsharp source code. 这不是简单的方法。我找到的唯一方法是提取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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.