簡體   English   中英

毛伊島的 Wordpress 數據使用 Wp API,Json 嘗試處理

[英]Wordpress data in Maui using Wp API, Json attempting to process

我試圖弄清楚從我的 MAUI 應用程序中的 Wordpress 站點恢復數據的問題是什么。 我使用 Json2csharp 鍵入我的 model:

    public class WpPost
{
    // Root myDeserializedClass = JsonSerializer.Deserialize<List<Root>>(myJsonResponse);
    public class About
    {
        [JsonPropertyName("href")]
        public string Href;
    }

    public class Author
    {
        [JsonPropertyName("name")]
        public string Name;

        [JsonPropertyName("@id")]
        public string Id;

        [JsonPropertyName("embeddable")]
        public bool Embeddable;

        [JsonPropertyName("href")]
        public string Href;
    }

    public class Breadcrumb
    {
        [JsonPropertyName("@id")]
        public string Id;
    }

    public class Collection
    {
        [JsonPropertyName("href")]
        public string Href;
    }

    public class Content
    {
        [JsonPropertyName("rendered")]
        public string Rendered;

        [JsonPropertyName("protected")]
        public bool Protected;
    }

    public class Cury
    {
        [JsonPropertyName("name")]
        public string Name;

        [JsonPropertyName("href")]
        public string Href;

        [JsonPropertyName("templated")]
        public bool Templated;
    }

    public class Excerpt
    {
        [JsonPropertyName("rendered")]
        public string Rendered;

        [JsonPropertyName("protected")]
        public bool Protected;
    }

    public class Graph
    {
        [JsonPropertyName("@type")]
        public object Type;

        [JsonPropertyName("@id")]
        public string Id;

        [JsonPropertyName("url")]
        public string Url;

        [JsonPropertyName("name")]
        public string Name;

        [JsonPropertyName("description")]
        public string Description;

        [JsonPropertyName("publisher")]
        public Publisher Publisher;

        [JsonPropertyName("potentialAction")]
        public List<PotentialAction> PotentialAction;

        [JsonPropertyName("inLanguage")]
        public string InLanguage;

        [JsonPropertyName("isPartOf")]
        public IsPartOf IsPartOf;

        [JsonPropertyName("datePublished")]
        public DateTime? DatePublished;

        [JsonPropertyName("dateModified")]
        public DateTime? DateModified;

        [JsonPropertyName("breadcrumb")]
        public Breadcrumb Breadcrumb;

        [JsonPropertyName("itemListElement")]
        public List<ItemListElement> ItemListElement;

        [JsonPropertyName("author")]
        public Author Author;

        [JsonPropertyName("headline")]
        public string Headline;

        [JsonPropertyName("mainEntityOfPage")]
        public MainEntityOfPage MainEntityOfPage;

        [JsonPropertyName("wordCount")]
        public int? WordCount;

        [JsonPropertyName("commentCount")]
        public int? CommentCount;

        [JsonPropertyName("articleSection")]
        public List<string> ArticleSection;

        [JsonPropertyName("image")]
        public Image Image;

        [JsonPropertyName("logo")]
        public Logo Logo;
    }

    public class Guid
    {
        [JsonPropertyName("rendered")]
        public string Rendered;
    }

    public class Image
    {
        [JsonPropertyName("@type")]
        public string Type;

        [JsonPropertyName("inLanguage")]
        public string InLanguage;

        [JsonPropertyName("@id")]
        public string Id;

        [JsonPropertyName("url")]
        public string Url;

        [JsonPropertyName("contentUrl")]
        public string ContentUrl;

        [JsonPropertyName("caption")]
        public string Caption;
    }

    public class IsPartOf
    {
        [JsonPropertyName("@id")]
        public string Id;
    }

    public class ItemListElement
    {
        [JsonPropertyName("@type")]
        public string Type;

        [JsonPropertyName("position")]
        public int Position;

        [JsonPropertyName("name")]
        public string Name;

        [JsonPropertyName("item")]
        public string Item;
    }

    public class Links
    {
        [JsonPropertyName("self")]
        public List<Self> Self;

        [JsonPropertyName("collection")]
        public List<Collection> Collection;

        [JsonPropertyName("about")]
        public List<About> About;

        [JsonPropertyName("author")]
        public List<Author> Author;

        [JsonPropertyName("replies")]
        public List<Reply> Replies;

        [JsonPropertyName("version-history")]
        public List<VersionHistory> VersionHistory;

        [JsonPropertyName("predecessor-version")]
        public List<PredecessorVersion> PredecessorVersion;

        [JsonPropertyName("wp:attachment")]
        public List<WpAttachment> WpAttachment;

        [JsonPropertyName("wp:term")]
        public List<WpTerm> WpTerm;

        [JsonPropertyName("curies")]
        public List<Cury> Curies;
    }

    public class Logo
    {
        [JsonPropertyName("@id")]
        public string Id;
    }

    public class MainEntityOfPage
    {
        [JsonPropertyName("@id")]
        public string Id;
    }

    public class Meta
    {
        [JsonPropertyName("jetpack_publicize_message")]
        public string JetpackPublicizeMessage;

        [JsonPropertyName("jetpack_is_tweetstorm")]
        public bool JetpackIsTweetstorm;

        [JsonPropertyName("jetpack_publicize_feature_enabled")]
        public bool JetpackPublicizeFeatureEnabled;
    }

    public class OgImage
    {
        [JsonPropertyName("url")]
        public string Url;
    }

    public class PotentialAction
    {
        [JsonPropertyName("@type")]
        public string Type;

        [JsonPropertyName("target")]
        public object Target;

        [JsonPropertyName("query-input")]
        public string QueryInput;

        [JsonPropertyName("name")]
        public string Name;
    }

    public class PredecessorVersion
    {
        [JsonPropertyName("id")]
        public int Id;

        [JsonPropertyName("href")]
        public string Href;
    }

    public class Publisher
    {
        [JsonPropertyName("@id")]
        public string Id;
    }

    public class Reply
    {
        [JsonPropertyName("embeddable")]
        public bool Embeddable;

        [JsonPropertyName("href")]
        public string Href;
    }

    public class Robots
    {
        [JsonPropertyName("index")]
        public string Index;

        [JsonPropertyName("follow")]
        public string Follow;

        [JsonPropertyName("max-snippet")]
        public string MaxSnippet;

        [JsonPropertyName("max-image-preview")]
        public string MaxImagePreview;

        [JsonPropertyName("max-video-preview")]
        public string MaxVideoPreview;
    }

    public class Root
    {
        [JsonPropertyName("id")]
        public int Id;

        [JsonPropertyName("date")]
        public DateTime Date;

        [JsonPropertyName("date_gmt")]
        public DateTime DateGmt;

        [JsonPropertyName("guid")]
        public Guid Guid;

        [JsonPropertyName("modified")]
        public DateTime Modified;

        [JsonPropertyName("modified_gmt")]
        public DateTime ModifiedGmt;

        [JsonPropertyName("slug")]
        public string Slug;

        [JsonPropertyName("status")]
        public string Status;

        [JsonPropertyName("type")]
        public string Type;

        [JsonPropertyName("link")]
        public string Link;

        [JsonPropertyName("title")]
        public Title Title;

        [JsonPropertyName("content")]
        public Content Content;

        [JsonPropertyName("excerpt")]
        public Excerpt Excerpt;

        [JsonPropertyName("author")]
        public int Author;

        [JsonPropertyName("featured_media")]
        public int FeaturedMedia;

        [JsonPropertyName("comment_status")]
        public string CommentStatus;

        [JsonPropertyName("ping_status")]
        public string PingStatus;

        [JsonPropertyName("sticky")]
        public bool Sticky;

        [JsonPropertyName("template")]
        public string Template;

        [JsonPropertyName("format")]
        public string Format;

        [JsonPropertyName("meta")]
        public Meta Meta;

        [JsonPropertyName("categories")]
        public List<int> Categories;

        [JsonPropertyName("tags")]
        public List<object> Tags;

        [JsonPropertyName("jetpack_publicize_connections")]
        public List<object> JetpackPublicizeConnections;

        [JsonPropertyName("yoast_head")]
        public string YoastHead;

        [JsonPropertyName("yoast_head_json")]
        public YoastHeadJson YoastHeadJson;

        [JsonPropertyName("jetpack_featured_media_url")]
        public string JetpackFeaturedMediaUrl;

        [JsonPropertyName("jetpack_sharing_enabled")]
        public bool JetpackSharingEnabled;

        [JsonPropertyName("jetpack_likes_enabled")]
        public bool JetpackLikesEnabled;

        [JsonPropertyName("_links")]
        public Links Links;
    }

    public class Schema
    {
        [JsonPropertyName("@context")]
        public string Context;

        [JsonPropertyName("@graph")]
        public List<Graph> Graph;
    }

    public class Self
    {
        [JsonPropertyName("href")]
        public string Href;
    }

    public class Title
    {
        [JsonPropertyName("rendered")]
        public string Rendered;
    }

    public class TwitterMisc
    {
        [JsonPropertyName("Scritto da")]
        public string ScrittoDa;

        [JsonPropertyName("Tempo di lettura stimato")]
        public string TempoDiLetturaStimato;
    }

    public class VersionHistory
    {
        [JsonPropertyName("count")]
        public int Count;

        [JsonPropertyName("href")]
        public string Href;
    }

    public class WpAttachment
    {
        [JsonPropertyName("href")]
        public string Href;
    }

    public class WpTerm
    {
        [JsonPropertyName("taxonomy")]
        public string Taxonomy;

        [JsonPropertyName("embeddable")]
        public bool Embeddable;

        [JsonPropertyName("href")]
        public string Href;
    }

    public class YoastHeadJson
    {
        [JsonPropertyName("title")]
        public string Title;

        [JsonPropertyName("description")]
        public string Description;

        [JsonPropertyName("robots")]
        public Robots Robots;

        [JsonPropertyName("canonical")]
        public string Canonical;

        [JsonPropertyName("og_locale")]
        public string OgLocale;

        [JsonPropertyName("og_type")]
        public string OgType;

        [JsonPropertyName("og_title")]
        public string OgTitle;

        [JsonPropertyName("og_description")]
        public string OgDescription;

        [JsonPropertyName("og_url")]
        public string OgUrl;

        [JsonPropertyName("og_site_name")]
        public string OgSiteName;

        [JsonPropertyName("article_published_time")]
        public DateTime ArticlePublishedTime;

        [JsonPropertyName("article_modified_time")]
        public DateTime ArticleModifiedTime;

        [JsonPropertyName("og_image")]
        public List<OgImage> OgImage;

        [JsonPropertyName("author")]
        public string Author;

        [JsonPropertyName("twitter_card")]
        public string TwitterCard;

        [JsonPropertyName("twitter_misc")]
        public TwitterMisc TwitterMisc;

        [JsonPropertyName("schema")]
        public Schema Schema;
    }

我創建了一個服務並將其注入到我的 ViewModel 中的 singleton 方式中,服務:

public Tive6Service()
    {
        _httpClient = new HttpClient();
    }

    public async Task<IEnumerable<WpPost>> GetAllWpPostsAsync()
    {            
        try
        {
            var response = await _httpClient.GetAsync(UriString + "/wp/v2/posts");
            if (response.IsSuccessStatusCode)
            {
                posts = await response.Content.ReadFromJsonAsync<IEnumerable<WpPost>>();
            }
            
        }
        catch (Exception e)
        {
            await Shell.Current.DisplayAlert("Error", e.Message, "Cancel");
        }
        return posts;
    }

    public async Task<WpPost> GetPostAsync(int id)
    {
        try
        {
            var response = await _httpClient.GetAsync(UriString + "/wp/v2/posts"+ id.ToString());
            if (response.IsSuccessStatusCode)
            {
                post = await response.Content.ReadFromJsonAsync<WpPost>();
            }

        }
        catch (Exception e)
        {
            await Shell.Current.DisplayAlert("Error", e.Message, "Cancel");
        }
        return post;
    }

視圖模型:

   public NewsViewModel(Tive6Service tive6Service)
    {
        Tive6Service = tive6Service;
        LoadPosts();
       
    }

    Task<ObservableCollection<WpPost>> LoadPosts()
    {            
        posts = new ObservableCollection<WpPost>(Tive6Service.GetAllWpPostsAsync().Result);
        return Task.FromResult(posts);  
    }

但是在調試期間,應用程序卡在線程中以恢復所有 WpPost,而不會引發異常。 深入細節,使用方法

post = 等待 response.Content.ReadAsStringAsync();

它可以工作,所以網站的 Web Api 沒問題,就像它的 swagger 在此之前展示給我一樣。 什么和我錯了?

謝謝你的好心

我已經解決了在服務 class 中更改以下代碼行的問題:

var response = _httpClient.GetAsync(UriString + "/wp/v2/posts").Result;

現在它起作用了。 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM