Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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
将JSON数组反序列化为C#对象(TFLAPI)_C#_.net_Json_Api_Serialization - Fatal编程技术网

将JSON数组反序列化为C#对象(TFLAPI)

将JSON数组反序列化为C#对象(TFLAPI),c#,.net,json,api,serialization,C#,.net,Json,Api,Serialization,我正在尝试将伦敦地铁API反序列化为C。API端点如下所示,它是一个JSON对象数组。我想反序列化为一个C#对象,但不知道如何实现。这就是我到目前为止所做的: using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; namespace TFL

我正在尝试将伦敦地铁API反序列化为C。API端点如下所示,它是一个JSON对象数组。我想反序列化为一个C#对象,但不知道如何实现。这就是我到目前为止所做的:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;

namespace TFL.Controllers
{
    [Route("api/[controller]")]
    public class TubeApi : Controller
    {
        [HttpGet("[action]")]
        public async Task<IActionResult> GetTubeStatus()
        {
            using (var client = new HttpClient())
            {
                try
                {
                    client.BaseAddress = new Uri("https://api.tfl.gov.uk");
                    var response = await client.GetAsync("/Line/Mode/tube/Status");
                    response.EnsureSuccessStatusCode();

                    var stringResult = await response.Content.ReadAsStringAsync();

                    var rawData = JsonConvert.DeserializeObject<List<RootObject>>(stringResult);

                        return Ok(new
                        {
                            LineId = rawData.name
                        });

                }
                catch (HttpRequestException httpRequestException)
                {
                    return BadRequest("Error getting data");
                }
            }
        }

    }


    public class RootObject
    {
        public string name { get; set; }
        public List<LineStatus> lineStatuses { get; set; }

    }

    public class LineStatus
    {
        public string statusSeverityDescription { get; set; }

    }

}


使用系统;
使用System.Collections.Generic;
使用System.Net.Http;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Newtonsoft.Json;
命名空间TFL.Controllers
{
[路由(“api/[控制器]”)]
公共类TubeApi:控制器
{
[HttpGet(“[action]”)
公共异步任务GetTubeStatus()
{
使用(var client=new HttpClient())
{
尝试
{
client.BaseAddress=新Uri(“https://api.tfl.gov.uk");
var response=wait client.GetAsync(“/Line/Mode/tube/Status”);
response.EnsureSuccessStatusCode();
var stringResult=await response.Content.ReadAsStringAsync();
var rawData=JsonConvert.DeserializeObject(stringResult);
返回Ok(新的
{
LineId=rawData.name
});
}
捕获(HttpRequestException HttpRequestException)
{
返回BadRequest(“获取数据时出错”);
}
}
}
}
公共类根对象
{
公共字符串名称{get;set;}
公共列表行状态{get;set;}
}
公共类行状态
{
公共字符串statusSeverityDescription{get;set;}
}
}
但是,我得到以下生成错误:

列表不包含名称的定义

我是JSON新手,从来没有从数组反序列化过,通常是从JSON
{“name”:“value”}
反序列化过

谁能帮我看看哪里出了问题


谢谢

请尝试以下代码以获取所有名称

var result = (from c in rawData select (new
            {
                LineId = c.name
            })).ToList();
return Ok(result);

请尝试以下代码以获取所有名称

var result = (from c in rawData select (new
            {
                LineId = c.name
            })).ToList();
return Ok(result);

您的
rawData
是一个
列表
列表
没有任何名为
名称
的属性

使用
var
有他的优点和缺点,如果你使用了正确的类型,我想你会看到你的错误

如果要获取
列表中某行的名称
,必须访问其中一个元素。您可以通过以下多种方式完成:

rawData[0].name;

你可以看看


希望这能对您有所帮助。

您的
原始数据是一个
列表。
列表
没有任何名为
名称
的属性

使用
var
有他的优点和缺点,如果你使用了正确的类型,我想你会看到你的错误

如果要获取
列表中某行的名称
,必须访问其中一个元素。您可以通过以下多种方式完成:

rawData[0].name;

你可以看看


希望这将对您有所帮助。

rawData
List
。您可以读取类似以下内容的值
rawData[0]。name
您可以显示类
RootObject
?@MariosNikolaou它位于同一文件的代码段中
rawData
是一个
列表。你知道你是这样反序列化的。错误是正确的,列表没有name属性,它是一个对象列表。这些对象确实有一个名为
name
的属性。如果您已经有一个自定义对象列表的句柄,那么它在这里也是一样的。您应该得到一个类型为
List
而不是
var rawData
的对象。然后迭代
RootObject
对象的
List
并获得名称值。
rawData
List
。您可以读取类似以下内容的值
rawData[0]。name
您可以显示类
RootObject
?@MariosNikolaou它位于同一文件的代码段中
rawData
是一个
列表。你知道你是这样反序列化的。错误是正确的,列表没有name属性,它是一个对象列表。这些对象确实有一个名为
name
的属性。如果您已经有一个自定义对象列表的句柄,那么这里也一样。您应该得到一个类型为
List
而不是
var rawData
的对象。然后迭代
RootObject
对象的
List
,并获得名称值。