我从以下公共API获得响应,其中包含航班信息(每个包含12个字段)。我正在尝试使用Newtonsoft.JSON将此响应反序列化到我的对象结构中。我真的不需要使用这个包 - 也欢迎推荐。
The API response that contains the flight data (WARNING, it's kinda a big response)
解析后的响应如下所示:
$query = "
SELECT
*
FROM
events e
RIGHT JOIN
booking_dates bd
ON e.id=bd.event_id
WHERE
bd.user_id = '{$user_id}'";
$event_set = mysqli_query($connection, $query);
第一个问题:根元素包含两个值,即“时间”和“状态”,它是一组航班信息。因此,我尝试创建我的类结构,如下所示:
{
"time": 1484343110,
"states": [
[
"a25f32",
"N252CV ",
"United States",
1484343109,
1484343109,
-86.9989,
40.5451,
2209.8,
false,
95.05,
327.6,
4.55,
null
],
[
"aac8a4",
"UAL35 ",
"United States",
1484343108,
1484343108,
-128.0702,
43.3022,
9144,
false,
220.81,
323.72,
0,
null
]]
}
第二个问题:“states”数组中的对象不包含字段名称。但仅仅因为他们的文档给出了字段的名称,我还是将它们放在/// <summary>
/// Field information is taken from
/// https://opensky-network.org/apidoc/rest.html
/// </summary>
public class FlightInformation
{
[JsonProperty("time")]
public string Timestamp { get; set; }
[JsonProperty("states")]
public List<FlightDetail> FlightDetails { get; set; }
}
public class FlightDetail
{
[JsonProperty(PropertyName = "icao24")]
public string ICAOAddress { get; set; }
[JsonProperty(PropertyName = "callsign")]
public string AircraftCallsign { get; set; }
[JsonProperty(PropertyName = "country")]
public string OriginCountry { get; set; }
[JsonProperty(PropertyName = "time_position")]
public string LastPositionUpdate { get; set; }
[JsonProperty(PropertyName = "time_velocity")]
public string LastVelocityUpdate { get; set; }
[JsonProperty(PropertyName = "longitude")]
public string Longitude { get; set; }
[JsonProperty(PropertyName = "latitude")]
public string Latitude { get; set; }
[JsonProperty(PropertyName = "altitude")]
public string Altitude { get; set; }
[JsonProperty(PropertyName = "on_ground")]
public string IsOnGround { get; set; }
[JsonProperty(PropertyName = "velocity")]
public string Velocity { get; set; }
[JsonProperty(PropertyName = "heading")]
public string Heading { get; set; }
[JsonProperty(PropertyName = "vertical_rate")]
public string VerticalRate { get; set; }
[JsonProperty(PropertyName = "sensors")]
public string[] Sensors { get; set; }
}
中。
我正在做的事情是这样的(在我的主应用程序中):
JsonProperty
在他们每个人中,我得到的错误是完全不同的。字典的结果是这样的:
将值1484344840转换为“FlightManager.DAL.FlightInformation”时出错。
第二个结果:
无法将当前JSON数组(例如[1,2,3])反序列化为类型“FlightManager.DAL.FlightDetail”,因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化
第三个结果与第二个相同。
最后一个(第四个)的结果是:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [FlightManager.DAL.FlightDetail]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。
正如我所说,我不需要使用Newtonsoft.JSON,因为我只是在试验......我可能做错了什么?
干杯。