RestSharp 将空字符串反序列化为字典错误
RestSharp Deserialization of empty string to Dictionary Error
我对 RestSharp 有点陌生,所以请原谅我的无知。我收到以下错误:
{"Unable to cast object of type 'System.String' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'."}
当 RestSharp 尝试反序列化并将字符串清空到 Dictionary 对象时,会发生这种情况。
这是我的缩写结果对象:
public class Result
{
public Dictionary<string, string> assignment_group { get; set; }
}
如果 assignment_group 已填充,则 return 编辑的内容如下:
"assignment_group":{"link":"https://someurl/api/now/table/sys_user_group/2c1cf1176f29f5007a3db03f5d3ee4aa","value":"2c1cf1176f29f5007a3db03f5d3ee4aa"}
如果 assignment_group 未填充,return 编辑的内容如下:
"assignment_group":""
发生的情况是 assignment_group 的 JSON 响应将是字典或空字符串。如果它是一个空字符串,我只会得到错误。我如何在我的结果 class assignment_group 属性?
中同时容纳这两种 return 类型
在此先感谢您的帮助。
更新:
这是适合我的解决方案。
我没有使用 RestSharp 默认的 Deserializer,而是使用了 Newtonsoft.Json。这是我的包装器 class:
中的代码示例
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;
}
您是否为此使用自定义 serializer/deserializer?因为我的理解是下面的情况都被覆盖了(但是你的例子没有):
- assignment_group = 空;
结果 "assignment_group":null
- assignment_group = 新字典();
结果 "assignment_group" : "{}"
- assignment_group = 新字典(); assignment_group.Add("key","value");
结果 "assignment_group" : "{"key":"value"}
这也可能与以下内容有关:https://github.com/restsharp/RestSharp/issues/486
我对 RestSharp 有点陌生,所以请原谅我的无知。我收到以下错误:
{"Unable to cast object of type 'System.String' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'."}
当 RestSharp 尝试反序列化并将字符串清空到 Dictionary 对象时,会发生这种情况。
这是我的缩写结果对象:
public class Result
{
public Dictionary<string, string> assignment_group { get; set; }
}
如果 assignment_group 已填充,则 return 编辑的内容如下:
"assignment_group":{"link":"https://someurl/api/now/table/sys_user_group/2c1cf1176f29f5007a3db03f5d3ee4aa","value":"2c1cf1176f29f5007a3db03f5d3ee4aa"}
如果 assignment_group 未填充,return 编辑的内容如下:
"assignment_group":""
发生的情况是 assignment_group 的 JSON 响应将是字典或空字符串。如果它是一个空字符串,我只会得到错误。我如何在我的结果 class assignment_group 属性?
中同时容纳这两种 return 类型在此先感谢您的帮助。
更新: 这是适合我的解决方案。
我没有使用 RestSharp 默认的 Deserializer,而是使用了 Newtonsoft.Json。这是我的包装器 class:
中的代码示例 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;
}
您是否为此使用自定义 serializer/deserializer?因为我的理解是下面的情况都被覆盖了(但是你的例子没有):
- assignment_group = 空; 结果 "assignment_group":null
- assignment_group = 新字典(); 结果 "assignment_group" : "{}"
- assignment_group = 新字典(); assignment_group.Add("key","value"); 结果 "assignment_group" : "{"key":"value"}
这也可能与以下内容有关:https://github.com/restsharp/RestSharp/issues/486