[英]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.