将JSON属性值数组反序列化为没有索引名称的对象

时间:2017-01-13 22:05:13

标签: c# arrays json web-services deserialization

我从以下公共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,因为我只是在试验......我可能做错了什么?

干杯。

0 个答案:

没有答案