C# Can';返回对象时无法访问自定义类属性
我有一段代码,它从Api链接检索Json值,并将它们输入到列表中。在此列表中有ID,如果存在于另一个API链接中,则检查所有这些IDC# Can';返回对象时无法访问自定义类属性,c#,object,properties,C#,Object,Properties,我有一段代码,它从Api链接检索Json值,并将它们输入到列表中。在此列表中有ID,如果存在于另一个API链接中,则检查所有这些ID private void button1_Click(object sender, EventArgs e) { var spidyApi_searchIdByName_result = api_Handler.GetApi(spidyApi_searchIdByName); var Gw2Api_isItemIdinListing_resu
private void button1_Click(object sender, EventArgs e)
{
var spidyApi_searchIdByName_result = api_Handler.GetApi(spidyApi_searchIdByName);
var Gw2Api_isItemIdinListing_result = api_Handler.GetApi(Gw2Api_allListings + spidyApi_searchIdByName_result.???); // can't access object property
}
这是GetApi方法:
public object GetApi(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonReader = new JsonTextReader(reader);
var serializer = new JsonSerializer();
return serializer.Deserialize<RootObject>(jsonReader);
}
}
catch (WebException)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<A>("{\"text\":\"no such id\"}");
}
}
但是,从
GetApi()
返回对象时,我无法访问返回的对象的属性。如何访问这些文件?您有两个问题
首先,您从方法返回对象
,因此无法访问。这就是为什么您应该返回更专门化的类型,因此在本例中:
public RootObject GetApi(string url)
{
// ...
return serializer.Deserialize<RootObject>(jsonReader);
}
那么就这样称呼它:
var spidyApi_searchIdByName_result = api_Handler.GetObjectFromApi<spidyApiResult>(spidyApi_searchIdByName);
if (spidyApi_searchIdByName_result != null)
{
var Gw2Api_isItemIdinListing_result = api_Handler.GetApi<RootObject>(Gw2Api_allListings + spidyApi_searchIdByName_result.someProperty);
}
var spidyApi_searchIDyname_result=api_Handler.GetObjectFromApi(spidyApi_searchIDyname);
if(spidyApi\u searchIDyname\u result!=null)
{
var Gw2Api_isItemIdinListing_result=api_Handler.GetApi(Gw2Api_allListings+spidyApi_searchIDyname_result.someProperty);
}
当然,这会吞噬WebException 正如我在中告诉您的,不要使用对象
作为返回类型,而是要返回的实际类型,在这种情况下是列表
,在这种情况下是根对象
。类object
没有您想要访问的属性,但是RootObject
有。是的,我知道哪一个起初工作得很好,但是现在在catch中我返回Newtonsoft.Json.JsonConvert.DeserializeObject(“{”text\“:\”没有这样的id\”)
这将给出无法将.A转换为.rootobject的错误,因为无法从一个方法返回两种不同的类型。编辑您的问题,使其与该特定问题相关,并删除所有不相关的代码和文本。捕获异常时返回null,而不是您正在处理的异常creating@Plutonix我不能返回null,因为它需要一个对象。我不完全理解。调用GetObjectFromApi
,然后将spidyApiResult
作为T
值插入。这是什么spidyapireult
?它应该是classA
?但是它也不能识别RootObject
,我不能返回null
。
public T GetObjectFromApi<T>(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonReader = new JsonTextReader(reader);
var serializer = new JsonSerializer();
return serializer.Deserialize<T>(jsonReader);
}
}
catch (WebException)
{
return null;
}
}
var spidyApi_searchIdByName_result = api_Handler.GetObjectFromApi<spidyApiResult>(spidyApi_searchIdByName);
if (spidyApi_searchIdByName_result != null)
{
var Gw2Api_isItemIdinListing_result = api_Handler.GetApi<RootObject>(Gw2Api_allListings + spidyApi_searchIdByName_result.someProperty);
}