2014-11-24 205 views
0

我想學習和使用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

回答

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>應該可能解決問題。

+0

謝謝,但它不允許我使用「item」。因爲它不存在。 – user2926008 2014-11-24 21:52:01

+0

現在,當您在問題中包含實際的JSON時,我的回答並不反映這一點。稍後更新。 – 2014-11-24 22:20:32

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不會能夠實例化對象,因爲它需要一個大小。

相關問題