使用Jsonsoft进行反序列化时,单线字符串失败



我有以下代码行

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

最新更新