我正在尝试学习并使用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
答案 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将无法实例化对象,因为它需要一个大小。