-1

我有很多反序列化wordpress api json到可觀察集合的問題。有沒有人有這方面的經驗?Xamarin.Forms使用WordPress API的ObservableCollection json

這裏是我遇到的問題:我能反序列化JSON成Jcontainer

,但是當我專門嘗試將其反序列化到一個ObservableCollection我不能這樣做。它告訴我它不能將json對象轉換成ObservableCollection。這讓我瘋狂!

任何人都可以提供一個實際的工作示例,能夠將wordpress API json反序列化爲ObservableCollection並將其顯​​示在ListView中。我認爲這是可能的,我只是不明白這應該如何工作。

順便說一句,我已經能夠進行其他API調用,反序列化它們,並將它們綁定到UI元素。

編輯:

這就是我現在所擁有的。

通知頁面

public partial class Notification : ContentPage 
{ 
    public Notification() 
    { 
     InitializeComponent(); 
     NotificationList.ItemsSource = NotificationData(); 
    } 
    public static async Task<Alerts> NotificationData() 
    { 
     var notification = await GetAlerts.GetAlert(); 
     return (Alerts)notification; 
    } 
} 

獲取通知

public class GetAlerts 
    { 
    public static async Task<ObservableCollection<Alerts>> GetAlert() 
    { 
     string WPPosts = "URL"; 

     HttpClient client = new HttpClient(); 
     var response = await client.GetAsync(WPPosts).ConfigureAwait(false); 
     Alerts data = null; 
     if (response != null) 
     { 
      string content = await response.Content.ReadAsStringAsync(); 
      string content_sanitized = RemoveTags(content); 
      data = JsonConvert.DeserializeObject<Alerts>(content_sanitized); 
     } 
     return data; 
    } 
    public static string RemoveTags(string content) 
    { 
     string returnStr = ""; 
     bool insideTag = false; 
     for (int i = 0; i < content.Length; ++i) 
     { 
      char c = content[i]; 
      if (c == '<') 
       insideTag = true; 
      if (!insideTag) 
       returnStr += c; 
      if (c == '>') 
       insideTag = false; 
     } 
     return returnStr; 
    } 
} 

這是我收到,一些

Error CS0266: Cannot implicitly convert type `System.Threading.Tasks.Task<Namespace.Alerts>' to `System.Collections.IEnumerable'. An explicit conversion exists (are you missing a cast?) (CS0266) 

我就不一一列舉了類中的主要錯誤,我我正在反序列化到這裏。

+0

你爲什麼不告訴我們你在做什麼第一,而不是要求我們拿出了一個從無到有的解決方案嗎? – Jason

+0

添加編輯。對於含糊不清的抱歉。 – PeterG

+0

哪條特定線路正在拋出錯誤?我看到的第一個明顯的錯誤是,您正嘗試將ObservableCollection 投射到警報,這不起作用。警報類是單個對象還是對象集合? – Jason

回答

0

如果您將數據反序列化爲列表。

var list = JsonConvert.Deserialize<IList<MyObject>>(jsonString); 

然後從中創建一個ObservableCollection。

var collection = new ObservableCollection(list); 
+0

非常感謝Adam試圖回答這個問題。我仍然有麻煩,所以我會試試你的方法! – PeterG