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