我有以下代码行
public T PostData<T>(string url, object content)
{
var result = default(T);
var response = string.Empty;
// other lines of code setting up client in between .. ignoring them for readability
response = client.UploadString(new Uri(url, UriKind.Relative), contentString);
result = JsonConvert.DeserializeObject<T>(response, settings);
}
结果行是代码失败的地方。以上帖子内容来自
public string GetCustomer(CustomerReq request)
{
var url = string.Format(_apiUrl + "/GetCustomer");
var result = _webApiRouter.Route<string>(url, Enums.HttpMethodType.Post, request);
return result;
}
上面的代码是我们将类型作为字符串传递的地方。它对所有对象都很好,直到我得到一个as字符串,response是一个单词ex:";测试";
Int,byte,double似乎工作得很好。所以现在我想要它如下。在if条件中处理此代码的最佳方法是什么
if (response = string i.e one word )
result =(T)Convert.ChangeType(response, typeof(T));
DeserializeObject()
可以处理纯字符串,只要它们被引用:
var test = JsonConvert.DeserializeObject<string>(""test"");
工作示例:https://dotnetfiddle.net/35qWGB
如果您无法更改端点,您可以简单地创建第二个不进行任何反序列化的PostData()
重载:
public string PostData(string url, object content)
{
// other lines of code setting up client in between .. ignoring them for readability
return client.UploadString(new Uri(url, UriKind.Relative), contentString);
}
你也可以做一些奇怪的事情,比如:
public T PostData<T>(string url, object content)
{
// other lines of code setting up client in between .. ignoring them for readability
var response = client.UploadString(new Uri(url, UriKind.Relative), contentString);
return typeof(T) == typeof(string)
? (T)(object)response
: JsonConvert.DeserializeObject<T>(response, settings);
}