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

时间:2014-11-24 21:39:07

标签: asp.net json deserialization

我正在尝试学习并使用asp.net做些什么。我正在尝试使用import.io的api从json api获取一些信息,但我无法弄明白。我试图解决它直到2天:

错误:没有为'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&amp; convertedObject)+527729      System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&amp; convertedObject)+66      System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&amp; convertedObject)+145      System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit)+66      System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(String input)+70      imdb_io_web.WebForm1.Page_Load(Object sender,EventArgs e)位于C:\ Users \ ahmetozsari \ documents \ visual studio 2010 \ Projects \ imdb_io_web \ imdb_io_web \ WebForm1.aspx.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(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+772

2 个答案:

答案 0 :(得分:2)

要么反序列化单个元素:

 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>应该可以解决问题。

答案 1 :(得分:0)

首先,您可以使用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将无法实例化对象,因为它需要一个大小。