简体   繁体   English

毛伊岛的 Wordpress 数据使用 Wp API,Json 尝试处理

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

I'm trying to figure out what is the problem for recover data from Wordpress site inside my MAUI application.我试图弄清楚从我的 MAUI 应用程序中的 Wordpress 站点恢复数据的问题是什么。 I type my model using Json2csharp:我使用 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;
    }

I've created a service and injected it in singleton way inside my ViewModel, Service:我创建了一个服务并将其注入到我的 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;
    }

ViewModel:视图模型:

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

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

But during Debug the application stuck in the thread for recover all the WpPost, without throwing exceptions.但是在调试期间,应用程序卡在线程中以恢复所有 WpPost,而不会引发异常。 Deepen in details, using method深入细节,使用方法

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

it works, so the Web Api of the website are ok, like its swagger show me before that.它可以工作,所以网站的 Web Api 没问题,就像它的 swagger 在此之前展示给我一样。 What and where I'm wrong?什么和我错了?

Thanks for your kindness谢谢你的好心

I've fixed the problem changing the line of code below in Service class:我已经解决了在服务 class 中更改以下代码行的问题:

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

Now it works.现在它起作用了。 Thanks to everyone.谢谢大家。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM