Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# 返回多个Json响应_C#_Json_.net_Google Places Api - Fatal编程技术网

C# 返回多个Json响应

C# 返回多个Json响应,c#,json,.net,google-places-api,C#,Json,.net,Google Places Api,我构建了这个API,它返回来自Google place API的JSON响应,以将其存储/保存到数据库中,正如这个代码示例显示的PlaceId列表,因此我编写了一个For循环来循环每个PlaceId,然后将它们全部返回到下一个点,即将它们发布到数据库中 public class portal_teilnehmerController : ControllerBase { private readonly _0046696KContext _context; private

我构建了这个API,它返回来自Google place API的JSON响应,以将其存储/保存到数据库中,正如这个代码示例显示的PlaceId列表,因此我编写了一个For循环来循环每个PlaceId,然后将它们全部返回到下一个点,即将它们发布到数据库中

    public class portal_teilnehmerController : ControllerBase
{
    private readonly _0046696KContext _context;
    private const string apiKey = @"apiKey";
    private const string fields = "&fields=address_component,rating,reviews,user_ratings_total,website";
    WebRequest request;
    WebResponse response;
    Stream data;
    StreamReader reader;
    private Task<string> responseFromServer;
    private string[] JsonResponses = { };

    public portal_teilnehmerController(_0046696KContext context)
    {
        _context = context;
    }
    [HttpGet]
    [Produces("application/json")]
    public async Task<JsonResult> Getportal_teilnehmerByPlaceId()
    {
        var PlaceId = await _context.portal_teilnehmer.Select(x => x.PlaceId).ToListAsync();

        if (PlaceId == null)
        {
            throw new InvalidOperationException("This Portal ID not found, please be assure of your portal ID");
        }

        for (int i = 0; i < PlaceId.Count(); i++)
        {

            string url = @"https://maps.googleapis.com/maps/api/place/details/json?place_id=" + (PlaceId[i]) + (fields) + (apiKey);

            request = WebRequest.Create(url);

            response = await request.GetResponseAsync();

            data = response.GetResponseStream();

            reader = new StreamReader(data);

            string timeStamp = GetTimestamp(DateTime.Now);

            responseFromServer = reader.ReadToEndAsync();
        }
        return new JsonResult(await responseFromServer);
    }
public类portal\u teilnehmerController:ControllerBase
{
私有只读(0046696KContext)上下文;
私有常量字符串apiKey=@“apiKey”;
private const string fields=“&fields=address\u component,rating,reviews,user\u ratings\u total,website”;
网络请求请求;
网络响应;
流数据;
流阅读器;
专用任务响应服务器;
私有字符串[]JsonResponses={};
公共门户网站teilnehmerController(_0046696K上下文)
{
_上下文=上下文;
}
[HttpGet]
[产生(“应用程序/json”)]
公共异步任务Getportal\u teilnehmerByPlaceId()
{
var PlaceId=wait_context.portal_teilnehmer.Select(x=>x.PlaceId.toListSync();
if(PlaceId==null)
{
抛出新的InvalidOperationException(“未找到此门户ID,请确保您的门户ID”);
}
对于(int i=0;i
但是当我测试时,它只返回For循环的最后一个PlaceId响应。 关于如何将它们全部返回到数组并保存它们,有什么想法吗

关于如何将它们全部返回到数组并保存它们,有什么想法吗

使用列表可能更容易:

    var responsesFromServer = new List<string>();
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    for (int i = 0; i < PlaceId.Count(); i++)
    {

        string url = @"https://maps.googleapis.com/maps/api/place/details/json?place_id=" + (PlaceId[i]) + (fields) + (apiKey);

        request = WebRequest.Create(url);

        response = await request.GetResponseAsync();

        data = response.GetResponseStream();

        reader = new StreamReader(data);

        string timeStamp = GetTimestamp(DateTime.Now);

        responsesFromServer.Add(await reader.ReadToEndAsync());
        //      ^          ^^^^^^^^^^                        ^
    }
    return new JsonResult(responsesFromServer);
    //                            ^
var responsesFromServer=newlist();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
对于(int i=0;i
带插入符号下划线的新位^

但是我想你可以使用数组,毕竟你知道你要下载多少个地方

    var responsesFromServer = new string[PlaceId.Count()];
    for (int i = 0; i < PlaceId.Count(); i++)
    {
        ...
        responsesFromServer[i] = await reader.ReadToEndAsync();
    }
    return new JsonResult(responsesFromServer);
var responsesFromServer=新字符串[PlaceId.Count()];
对于(int i=0;i
Wow,我没想到会这么简单,但猜猜它是什么魅力,我非常感谢你。谢谢。很抱歉,我不能投票支持你的答案,因为我是这里的一个noob。没关系。你的支持票仍然会被记录下来,即使它们没有显示出来,而且一旦你达到代表级别(我想是15),它们都会突然生效,为了使它们适用,请随意投票/提问和回答:)它没有刷新,所以我没有看到最新的编辑,但如果我理解得很好,我认为这两种方法做的是相同的事情,但出于某种原因,我想你的代码是做我们在这里讨论的事情的正确方法。它们实际上是相同的事情,并且会导致不同的结果他输出了相同的JSON。实际上,在内部,列表使用数组。我们只是倾向于使用列表来表示我们修改的集合,使用数组来表示我们不修改的集合/因为这一个正在被修改,所以我使用了列表。列表也总是有“正确的数字”元素来包含它的所有数据,而如果你在数组的一半停止处理,那么在数组的末尾会有一堆空插槽是的,我的意思是它们实际上是一样的,但是天哪,这就像我的代码有严重的问题,我现在应该遵循你的。再次感谢,感谢这些非常重要的信息。我投票祝你有一个美好的一天