尽管我已经在老学校发展了几年,但是我需要一些有关如何将此json显示到列表视图的帮助。
从URL返回的JSON
[
{
"LastUpdated":"09/10/2019 09:08:02",
"Latitude":-33.917713,
"Longitude":18.431315,
"PlannedEndDate":"",
"Reported":"09/10/2019 09:00:38",
"StartDate":"09/10/2019 09:00:38",
"ID":"WC-ATMS-196763",
"RegionName":"Western Cape",
"CountyName":null,
"Severity":"none",
"RoadwayName":"Table Bay Blvd",
"DirectionOfTravel":"Inbound",
"Description":null,
"Location":"0.0 km after N2 Elevated Freeway",
"LanesAffected":null,
"LanesStatus":null,
"LcsEntries":null,
"NavteqLinkId":"771421441",
"PrimaryLocation":null,
"SecondaryLocation":null,
"FirstArticleCity":null,
"SecondCity":null,
"EventType":"TrafficConditions",
"EventSubType":"Mainline Congestion",
"MapEncodedPolyline":null
},
{
"LastUpdated":"09/10/2019 09:30:02",
"Latitude":-26.0378,
"Longitude":28.016144,
"PlannedEndDate":"",
"Reported":"09/10/2019 08:08:25",
"StartDate":"09/10/2019 08:08:25",
"ID":"GP-ATMS-207804",
"RegionName":"Gauteng",
"CountyName":null,
"Severity":"minor",
"RoadwayName":"N1",
"DirectionOfTravel":"Southbound",
"Description":null,
"Location":"0.7 km before Ramp from William Nicol I/C",
"LanesAffected":null,
"LanesStatus":null,
"LcsEntries":null,
"NavteqLinkId":"837759156",
"PrimaryLocation":null,
"SecondaryLocation":null,
"FirstArticleCity":null,
"SecondCity":null,
"EventType":"TrafficConditions",
"EventSubType":"Ramp Congestion",
"MapEncodedPolyline":null
},
{
"LastUpdated":"09/10/2019 09:52:20",
"Latitude":-33.944828,
"Longitude":18.472132,
"PlannedEndDate":"",
"Reported":"09/10/2019 09:49:42",
"StartDate":"09/10/2019 09:49:42",
"ID":"WC-ATMS-196773",
"RegionName":"Western Cape",
"CountyName":null,
"Severity":"none",
"RoadwayName":"N2",
"DirectionOfTravel":"Inbound",
"Description":null,
"Location":"0.0 km after Ramp to Mowbray Main",
"LanesAffected":null,
"LanesStatus":null,
"LcsEntries":null,
"NavteqLinkId":"771096842",
"PrimaryLocation":null,
"SecondaryLocation":null,
"FirstArticleCity":null,
"SecondCity":null,
"EventType":"AccidentsAndIncidents",
"EventSubType":"Shoulder Lane",
"MapEncodedPolyline":null
}
]
事件对象
public class Events
{
public string LastUpdated { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public string PlannedEndDate { get; set; }
public string Reported { get; set; }
public string StartDate { get; set; }
public string ID { get; set; }
public string RegionName { get; set; }
public object CountyName { get; set; }
public string Severity { get; set; }
public string RoadwayName { get; set; }
public string DirectionOfTravel { get; set; }
public object Description { get; set; }
public string Location { get; set; }
public string LanesAffected { get; set; }
public object LanesStatus { get; set; }
public object LcsEntries { get; set; }
public string NavteqLinkId { get; set; }
public object PrimaryLocation { get; set; }
public object SecondaryLocation { get; set; }
public object FirstArticleCity { get; set; }
public object SecondCity { get; set; }
public string EventType { get; set; }
public string EventSubType { get; set; }
public object MapEncodedPolyline { get; set; }
}
代码
ObservableCollection<Events> events = new ObservableCollection<Events>();
Events events = JsonConvert.DeserializeObject<Events>(json);
lvEvents.ItemsSource = events;
xaml
<ListView x:Name="lvEvents" ItemsSource="{Binding Events}" >
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding RegionName}" ></Label>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我收到错误
无法将当前JSON数组(例如[1,2,3])反序列化为类型'Project.View.Events',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化。 要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。 路径”,第1行,位置1。
答案 0 :(得分:4)
您的JSON是对象列表。您正在尝试将其反序列化为单个对象。
尝试做类似的事情:
List<Events> events = JsonConvert.DeserializeObject<List<Events>>(json);
lvEvents.ItemsSource = events;
如果您希望以后能够修改列表,并在UI中反映这些更新,则应改用ObservableCollection<T>
:
ObservableCollection<Events> events = JsonConvert.DeserializeObject<ObservableCollection<Events>>(json);
lvEvents.ItemsSource = events;
您的Events
类实际上代表一个事件,您可能应该将其重命名为Event
。