ObservableCollectionにシンプルjsonをデシリアライズしようとしています。 Deserializationのブレークポイントを設定すると、何も起きないようです。メソッドは決して完了せず、エラーをスローしません。 jsonを取得して文字列に変換できます。ObservableCollectionにデシリアライズしないでください。jsonをObservableCollectionにデシリアライズしてXamarin.Formsのxamlにバインドできません
何か不足していますか?私はオブジェクトにデシリアライズするために見つけることができるすべてのコード例を見てきましたが、それを機能させるように見えません。
これは私のXamarin.Formsページのコードです。
public partial class Notification : ContentPage
{
public Notification()
{
InitializeComponent();
this.BindingContext = NotificationData();
}
public async Task NotificationData()
{
ObservableCollection<Alert> notification = await GetAlert();
NotificationList.ItemsSource = notification;
}
public static async Task<ObservableCollection<Alert>> GetAlert()
{
string WPPosts = "https://www.url.com/alerts.json";
HttpClient client = new HttpClient();
var response = await client.GetAsync(WPPosts).ConfigureAwait(false);
if (response != null)
{
ObservableCollection<Alert> data = new ObservableCollection<Alert>();
string content = response.Content.ReadAsStringAsync().Result;
//string content_sanitized = RemoveHTMLTags(content);
data = JsonConvert.DeserializeObject<ObservableCollection<Alert>>(content);
return data;
}
else { return null; }
}
public class Alert
{
public string title { get; set; }
public string imgUrl { get; set; }
public string content { get; set; }
}
public class RootObject
{
public List<Alert> alerts { get; set; }
}
}
これは私のXamlです。
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" Title="News
and Alerts" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="JenksTrash.Notification" xmlns:local="clr-
namespace:JenksTrash" >
<ListView x:Name="NotificationList">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1" />
<ColumnDefinition Width="7*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding title}" FontAttributes="Bold" />
<Label Text="{Binding content}" FontAttributes="Bold" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
これは素晴らしいだろう理解するすべてのヘルプ。
json配列[]がオブジェクト{}内に含まれているため、jsonとデシリアライズしようとしているものとの間に不一致があります。あなたはどちらか一方を修正して、両方が一致するようにする必要があります。 – Jason
ありがとう、ジェイソン。私は構造を変更し、問題なくデシリアライズしてバインドすることができました。私はこれを理解しようと数週間過ごしたので、ありがとう。 – PeterG