没有无参数的构造函数定义类型

问题描述:

我想学习和使用asp.net做些什么。我试图从json api中使用import.io的api获取一些信息,但我无法弄清楚什么。我试图解决它,直到两日游:没有无参数的构造函数定义类型

错误:类型“imdb_io_web.IMDB []”

为什么会出现这个错误我真的不明白的定义无参数的构造函数?

我有一个类

namespace imdb_io_web 
{ 
    public class IMDB 
    { 
     public string director { get; set; } 
    } 
} 

,并试图从IMDB

var wc = new WebClient(); 
     var serializer = new JavaScriptSerializer(); 
     var result = serializer.Deserialize<IMDB[]>(wc.DownloadString("MYAPI")); 
     foreach (var item in result) { Label1.Text = item.director; } 

[MissingMethodException得到导演的名字:类型的 'imdb_io_web.IMDB []' 没有定义参数的构造函数。 ] System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object &转换对象)+527729 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object & convertedObject)+66 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o ,类型类型,JavaScriptSerializer序列化程序,布尔throwOnError,对象& convertedObject)+145 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化程序,字符串输入,类型类型,Int32 depthLimit)+66 System.Web.Script。 C:\ Users \ ahmetozsari \ documents \ visual studio 2010 \ Projects \ imdb_io_web \ imdb_io_web \ WebForm1.aspx中的Serialization.JavaScriptSerializer.Deserialize(String input)+70 imdb_io_web.WebForm1.Page_Load(Object sender,EventArgs e)。 cs:26 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+51 System.Web.UI.Control.OnLoad(EventArgs e)+92 System.Web.UI.Control.LoadRecursive() +54 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)772

+0

Json字符串是什么样的? – 2014-11-24 21:41:09

+0

json添加到主 – user2926008 2014-11-24 21:50:03

+0

您是否尝试在IMDB类中添加默认构造函数? – Sam 2014-11-24 22:34:17

要么你反序列化的单个元素:

var result = serializer.Deserialize<IMDB>(wc.DownloadString("MYAPI")); 
Label1.Text = item.director; 

或列表

var result = serializer.Deserialize<List<IMDB>>(wc.DownloadString("MYAPI")); 
foreach (var item in result) { Label1.Text = item.director; } 

当您读入异常时,数组类型(IMDB[])不能用作解串器的类型参数,因为它缺少无参数构造函数。使用List<IMDB>应该可能解决问题。

+0

谢谢,但它不允许我使用“item”。因为它不存在。 – user2926008 2014-11-24 21:52:01

+0

现在,当您在问题中包含实际的JSON时,我的回答并不反映这一点。稍后更新。 – 2014-11-24 22:20:32

首先,您可以使用HttpClient类进行API操作。

using (var httpClient = new HttpClient()) 
      { 
       var operationResult = await httpClient.GetStringAsync(@"http://localhost/api/requests"); 

      } 

其次,JSON转换操作,您可以使用Json.NET

using Newtonsoft.Json; 

public class RequestJson 
{ 
    [JsonProperty("request")] 
    public Request Request { get; set; } 
} 

public class Request 
{ 
    [JsonProperty("name")] 
    public string Name{ get; set; } 

} 

JsonConvert.DeserializeObject<List<RequestJson>>(operationResult); 

你必须使用List模板类型,因为我的理解,当你创建一个数组类型,然后Newtonsoft.Json不会能够实例化对象,因为它需要一个大小。