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——好吧,我尝试了一下。我只是不知道你的问题是什么是的,我不怪你。。。这个问题真的很不清楚,我停止发布答案。但无论如何,你的答案可能是成功的