【问题标题】:No overload for method 'Deserialize' takes 2 arguments?方法“反序列化”没有重载需要 2 个参数?
【发布时间】:2023-03-16 02:24:01
【问题描述】:

我正在尝试使用返回 json 的 GET 方法调用 Web api。我的代码运行良好并返回了 json 数据。但我在反序列化数据方面面临的挑战。我的代码是:(.Net framework 3.5)

WebRequest req = WebRequest.Create("url");
req.Method = "GET";
req.ContentType = "application/json; charset=utf-8";
WebResponse resp = req.GetResponse();

Stream stream = resp.GetResponseStream();
StreamReader re = new StreamReader(stream);
String json = re.ReadToEnd();

以上代码工作正常并返回数据。问题出在下面一行:

wrapper w = (wrapper)new JavaScriptSerializer().Deserialize(json, typeof(wrapper));

显示错误:

“反序列化”方法没有重载需要 2 个参数。

我该怎么办?提前致谢。

【问题讨论】:

  • 如果我从反序列化方法中删除第二个参数,它仍然显示错误:方法'System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(字符串)'的类型参数不能从用法推断。尝试明确指定类型参数。

标签: c# .net winforms asp.net-web-api serialization


【解决方案1】:

JavaScriptSearializer 自 3.5 版起在 .Net Framework 中可用,但在 3.5 版中,没有采用 2 个参数的 Deserialize 方法的重载。从 4.0 版开始提供 2 个参数的重载。 3.5 只有一个 Deserialize 方法,您需要通过传递泛型类型而不是第二个参数来使用它。

wrapper w = (wrapper)new JavaScriptSerializer().Deserialize<wrapper>(json);

Here 是有关您要使用的方法的文档。如果您滚动到页面底部,则有 版本信息 部分,您可以在其中发现此方法从 4.0 版开始可用

【讨论】:

  • 而不是 Deserialize 中的包装器,我应该写包装器类的类名,因为这给了我空记录。如果我写类名而不是包装器,它会显示错误:无法将类型'with3._5GetMethod.Form1.SalesPerson'转换为'with3._5GetMethod.Form1.wrapper'??
  • 应该有包装类的类名
  • 你能在问题中添加包装类和json sn-ps吗
【解决方案2】:

您尝试过 Newtonsoft.Json 库吗?

using Newtonsoft.Json;

你可以这样做

wrapper w = JsonConvert.DeserializeObject<wrapper>(json);

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多