将空字符串反序列化为字典错误

本文关键字:字典 错误 反序列化 字符串 | 更新日期: 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;
 }

将空字符串反序列化为字典错误

您是否为此使用了自定义序列化/反序列化器?因为我的理解是包括以下情况(但你的例子没有):

  1. assignment_group = null;结果"assignment_group":null
  2. assignment_group = new Dictionary();"assignment_group": "{}"
  3. assignment_group = new Dictionary();assignment_group.Add("关键"、"价值");结果为"assignment_group":" {"key":"value"}

这也可能与:https://github.com/restsharp/RestSharp/issues/486