C# 将服务响应中的值分配给对象列表

C# 将服务响应中的值分配给对象列表,c#,C#,我有以下代码,其中我从服务中获得的结果如下: var result=CallService(); response.Alllist = new List<Check> { new Check { Bundle1 = new Bundle {

我有以下代码,其中我从服务中获得的结果如下:

var result=CallService();
 response.Alllist = new List<Check>
                {
                    new Check
                    {
                        Bundle1 = new Bundle
                        {
                            Documents = new List<Document>
                            {
                                new Document(), new Document()
                            }
                        },


                    },
                    new CheckList
                    {
                        Bundle1 = new Bundle
                        {
                            Documents = new List<Document>
                            {
                                new Document(), new Document()
                            }
                        },
                    }

但由于结果是动态的,如果
响应,我无法获取c.BundleName的值。Alllist
是一个
列表,正如您在第一个代码块中演示的,您可以通过以下方式填充值:

response.Alllist[0].Bundle1.DocumentCategory = "my category";
response.Alllist[0].Bundle1.Documents[0].DocumentName  = "my doc name";
等等


除此之外,我真的不知道还能告诉你什么。我假设您知道如何通过索引等方式对集合进行寻址。您只需查看第二个代码块中的类组成层次结构,即哪些类包含其他类的实例或集合。

如果
响应。Alllist
是一个
列表,正如您在第一个代码块中演示的那样,可以通过以下方式填充值:

response.Alllist[0].Bundle1.DocumentCategory = "my category";
response.Alllist[0].Bundle1.Documents[0].DocumentName  = "my doc name";
等等


除此之外,我真的不知道还能告诉你什么。我假设您知道如何通过索引等方式对集合进行寻址。您只需查看第二个代码块中的类组成层次结构,即哪些类包含其他类的实例或集合。

基于我对您问题的理解,在类似情况下,我尝试了以下方法。希望这有帮助。myclass是在我的项目包含字段中定义的类

 Guid testGuid = guid.empty;
 using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = client.GetAsync(testData.customerAccountURL).Result;
            if (response.IsSuccessStatusCode)
            {
                string JSONResponse = response.Content.ReadAsStringAsync().Result;
                var rObjects = JsonConvert.DeserializeObject<List<myclass>>(JSONResponse);
                testGuid = Guid.Parse(rObjects.First().field1.ToString());
                // now use this guid to search for a customer
            }

            string GuidURL = URL + "/"+ testGuid;
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(GuidURL);
            httpWebRequest.ContentType = "application/json; charset=utf-8";
            httpWebRequest.Method = "GET";
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(result);
                string data = values.ElementAt(0).Value;
            }
        }
Guid testGuid=Guid.empty;
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessageResponse=client.GetAsync(testData.customerAccountURL).Result;
if(响应。IsSuccessStatusCode)
{
字符串JSONResponse=response.Content.ReadAsStringAsync().Result;
var rObjects=JsonConvert.DeserializeObject(JSONResponse);
testGuid=Guid.Parse(rObjects.First().field1.ToString());
//现在使用此guid搜索客户
}
字符串GuidURL=URL+“/”+testGuid;
var httpWebRequest=(httpWebRequest)WebRequest.Create(GuidURL);
httpWebRequest.ContentType=“application/json;charset=utf-8”;
httpWebRequest.Method=“GET”;
var httpResponse=(HttpWebResponse)httpWebRequest.GetResponse();
使用(var streamReader=newstreamreader(httpResponse.GetResponseStream())
{
var result=streamReader.ReadToEnd();
字典值=JsonConvert.DeserializeObject(结果);
字符串数据=值.ElementAt(0).Value;
}
}

根据我对您问题的理解,在类似情况下,我尝试了以下方法。希望这有帮助。myclass是在我的项目包含字段中定义的类

 Guid testGuid = guid.empty;
 using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = client.GetAsync(testData.customerAccountURL).Result;
            if (response.IsSuccessStatusCode)
            {
                string JSONResponse = response.Content.ReadAsStringAsync().Result;
                var rObjects = JsonConvert.DeserializeObject<List<myclass>>(JSONResponse);
                testGuid = Guid.Parse(rObjects.First().field1.ToString());
                // now use this guid to search for a customer
            }

            string GuidURL = URL + "/"+ testGuid;
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(GuidURL);
            httpWebRequest.ContentType = "application/json; charset=utf-8";
            httpWebRequest.Method = "GET";
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(result);
                string data = values.ElementAt(0).Value;
            }
        }
Guid testGuid=Guid.empty;
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessageResponse=client.GetAsync(testData.customerAccountURL).Result;
if(响应。IsSuccessStatusCode)
{
字符串JSONResponse=response.Content.ReadAsStringAsync().Result;
var rObjects=JsonConvert.DeserializeObject(JSONResponse);
testGuid=Guid.Parse(rObjects.First().field1.ToString());
//现在使用此guid搜索客户
}
字符串GuidURL=URL+“/”+testGuid;
var httpWebRequest=(httpWebRequest)WebRequest.Create(GuidURL);
httpWebRequest.ContentType=“application/json;charset=utf-8”;
httpWebRequest.Method=“GET”;
var httpResponse=(HttpWebResponse)httpWebRequest.GetResponse();
使用(var streamReader=newstreamreader(httpResponse.GetResponseStream())
{
var result=streamReader.ReadToEnd();
字典值=JsonConvert.DeserializeObject(结果);
字符串数据=值.ElementAt(0).Value;
}
}


不清楚您在问什么。您的服务是否返回JSON?如果是,那么为什么不使用DTO?否,这是一个服务返回的字段列表,什么是
结果
?正如我在问题中提到的,结果是一个包含Bundlename、document Name等字段的列表的通用集合。您真的不清楚您在问什么。您的服务返回JSON吗?如果是,那么为什么不使用DTO?否,这是一个服务返回的字段列表,什么是
结果
?正如我在问题中提到的,结果是一个包含Bundlename、document Name等字段的列表的通用集合。我的意思是结果变量也是列表。所以我认为应该有任何循环或lambda表达式来实现这一点,它不会抛出NRE或outofrange异常,因为
响应NULL@Rahul也许我不理解这里的上下文,但是第一个代码块建立了合成层次结构,例如,
response.Alllist=…
带有对象初始值设定项,所以没有空引用。@user3331421——好吧,我尝试了一下。我只是不知道你的问题是什么是的,我不怪你。。。这个问题真的很不清楚,我停止发布答案。但无论如何,你们的答案可能是OP的一个良好开端。我的意思是结果变量也是列表。所以我认为应该有任何循环或lambda表达式来实现这一点,它不会抛出NRE或outofrange异常,因为
响应NULL@Rahul也许我不理解这里的上下文,但是第一个代码块建立了合成层次结构,例如,
response.Alllist=…
带有对象初始值设定项,所以没有空引用。@user3331421——好吧,我尝试了一下。我只是不知道你的问题是什么是的,我不怪你。。。这个问题真的很不清楚,我停止发布答案。但无论如何,你的答案可能是成功的