Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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# 为什么我的代码不能反序列化到我的模型中?_C#_Serialization - Fatal编程技术网

C# 为什么我的代码不能反序列化到我的模型中?

C# 为什么我的代码不能反序列化到我的模型中?,c#,serialization,C#,Serialization,我正在调用一个外部api服务,但是我遇到了一个异常,它不会反序列化到我的模型中: 我的回答是 [ { "$type": "Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities", "id": "a2", "displayName": "A2", "statusSeverity": "Good", "statusSev

我正在调用一个外部api服务,但是我遇到了一个异常,它不会反序列化到我的模型中:

我的回答是

[
    {
        "$type": "Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities",
        "id": "a2",
        "displayName": "A2",
        "statusSeverity": "Good",
        "statusSeverityDescription": "No Exceptional Delays",
        "bounds": "[[-0.0857,51.44091],[0.17118,51.49438]]",
        "envelope": "[[-0.0857,51.44091],[-0.0857,51.49438],[0.17118,51.49438],[0.17118,51.44091],[-0.0857,51.44091]]",
        "url": "/Road/a2"
    }
]
我的代码是

 public class TravelService : ITravelService
    {
        string baseURL = "https://foo.bar/blah.blah";

        private readonly IMapToNew<Road, RoadDto> _mapper;
        public TravelService()
        {

        }


        public TravelService(IMapToNew<Road, RoadDto> mapper)
        {
            _mapper = mapper;
        }

        public async Task<RoadDto> GetTravelInformation()
        {
            var road = GetRoad();

            Console.WriteLine(road.Result.DisplayName);

            return new RoadDto
            {
                DisplayName = road.Result.DisplayName,
                StatusSeverityDescription = road.Result.DisplayName,
                StatusSeverity = road.Result.DisplayName
            };
        }


        private async Task <Road> GetRoad()
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(baseURL);

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage Res = await client.GetAsync(baseURL);

            if (Res.IsSuccessStatusCode)
            {
                var roadResponse = Res.Content.ReadAsStringAsync().Result;

                Road road = JsonConvert.DeserializeObject<Road>(roadResponse);
                return new Road
                {
                    DisplayName = road.DisplayName,
                    StatusSeverity = road.StatusSeverity,
                    StatusSeverityDescription = road.StatusSeverityDescription
                };
            }

            return new Road { };
        }


    }

当我运行代码时,我得到一个异常:“发生了一个或多个错误。”。(发生一个或多个错误。(无法将当前JSON数组(例如[1,2,3])反序列化为类型“Travel.Responses.Road”,因为该类型需要JSON对象(例如{“name”:“value”})要正确地反序列化

,正如异常消息所解释的,您正试图反序列化为一条
道路
,但负载实际上是一个包含道路的JSON数组。您可以执行以下操作:

var roads = JsonConvert.DeserializeObject<Road[]>(roadResponse);
var road = roads.Single(); // assuming you know the array only has one entry
var roads=JsonConvert.DeserializeObject(roadResponse);
var road=roads.Single();//假设您知道数组只有一个条目
List road=JsonConvert.DeserializeObject(roadResponse);
这对我有用


谢谢大家

你能发布你的Road类吗?我会从@JasonChoe开始查看编辑:)添加
[JsonProperty]
并为所有属性提供属性名。你需要使用
JsonConvert.DeserializeObject
,因为JSON是一个数组。另外,
“$type”
是Json.NET中表示多态子类型的保留属性名。如果不关心多态性,可以忽略它。
var roads = JsonConvert.DeserializeObject<Road[]>(roadResponse);
var road = roads.Single(); // assuming you know the array only has one entry
   List<Road> road = JsonConvert.DeserializeObject<List<Road>>(roadResponse);