将空字符串反序列化为字典错误
本文关键字:字典 错误 反序列化 字符串 | 更新日期: 2023-09-27 17:54:28
我对RestSharp有点陌生,所以请原谅我的无知。我得到以下错误:
{"Unable to cast object of type 'System.String' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'."}
当RestSharp试图反序列化一个空字符串到Dictionary对象时,就会发生这种情况。
下面是my的缩写Result对象:
public class Result
{
public Dictionary<string, string> assignment_group { get; set; }
}
如果填充了assignment_group,返回的结果如下:
"assignment_group":{"link":"https://someurl/api/now/table/sys_user_group/2c1cf1176f29f5007a3db03f5d3ee4aa","value":"2c1cf1176f29f5007a3db03f5d3ee4aa"}
如果assignment_group没有被填充,返回的结果如下:
"assignment_group":""
正在发生的是JSON对assignment_group的响应将是一个Dictionary或一个空字符串。我只会得到错误,如果它是一个空字符串。我如何在我的结果类assignment_group属性容纳两个返回类型?
提前感谢你的帮助。
更新:这是我的工作解决方案
代替RestSharp使用的默认反序列化器,我使用Newtonsoft。Json。下面是我的包装器类的代码示例:
public T Execute<T>(RestRequest request) where T : new()
{
if (request.Method == Method.POST)
client.FollowRedirects = false;
var response = client.Execute<T>(request);
// **** Added Newtonsoft.Json ****
var x = JsonConvert.DeserializeObject<T>(response.Content);
LogRequest(request, client);
LogResponse<T>(response);
ErrorHandling<T>(response);
// ****This is no longer needed. Data is null now****
// return response.Data;
// **** Added ****
return x;
}
您是否为此使用了自定义序列化/反序列化器?因为我的理解是包括以下情况(但你的例子没有):
- assignment_group = null;结果"assignment_group":null
- assignment_group = new Dictionary();"assignment_group": "{}"
- assignment_group = new Dictionary();assignment_group.Add("关键"、"价值");结果为"assignment_group":" {"key":"value"}
这也可能与:https://github.com/restsharp/RestSharp/issues/486