Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';返回对象时无法访问自定义类属性_C#_Object_Properties - Fatal编程技术网

C# Can';返回对象时无法访问自定义类属性

C# 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

我有一段代码,它从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_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
?它应该是class
A
?但是它也不能识别
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);
}