代码之家  ›  专栏  ›  技术社区  ›  john Gu

下载DataTaskAsync和JsonConvert.DeserializeObject。将引发以下错误:-无法转换无法从“byte[]”转换为“string”

  •  1
  • john Gu  · 技术社区  · 10 年前

    我正在开发ASP。NET MVC5 web应用程序+EF6.0。我有以下异步操作方法。

    public ActionResult ScanServer(string tokenfromt, string FQDN)
    {
        using (WebClient wc = new WebClient())
        {
            string url = currentURL + "resources/" + passwordmanagerResourceID +
                         "/accounts/" + passwordmanagerAccountID + 
                         "/password?AUTHTOKEN=" + pmtoken;
    
            var json = await wc.DownloadDataTaskAsync(url);
            resourceAccountPasswordListInfo =
                JsonConvert.DeserializeObject<ResourceAccountPasswordInfo>(json);
        }
    }
    
    public class ResourcesInfo
    {
        public Operation operation { get; set; }
    }
    

    但这引发了以下例外。

    错误1“Newtonsoft.Json.JsonConvert.DeserializeObject(string)”的最佳重载方法匹配 具有一些无效参数C:\Users…..\Visual Studio 2012\Projects\t扫描最终结果\t扫描最终结果\控制器\主控制器。cs 155 63 t最终扫描

    错误2参数1:无法从“byte[]”转换为“string”C:\Users\M……\Visual Studio 2012\Projects\t扫描最终结果\t扫描最终结果\控制器\主控制器。cs 155 122 t扫描最终

    1 回复  |  直到 10 年前
        1
  •  1
  •   beautifulcoder    10 年前

    正如@dbc所指出的,这是一个键入问题。 DeserializeObject<T>(string value) 接受字符串参数而不是字节数组: JsonConvert.DeserializeObject Method (String) .

    您有两种选择:

    JsonConvert.DeserializeObject<ResourceAccountPasswordInfo>(json.ToString());
    

    var json = await wc.DownloadStringAsync(url);
    

    此外,通过调试工具确保json是合法的。