Member 12468321 Ответов: 1

Как десериализовать массивы json из url-адреса в C# ?


Я пытался десериализовать данные json из url wordpress, но ничего не вышло.
Я видел много учебников, но никто не работал над моим !

Это мой адрес : https://mahdii.000webhostapp.com/?wpapi=get_posts& amp; amp; dev=1[^]

Я получаю Null в var serialized_post.

Пожалуйста мне нужна помощь

Что я уже пробовал:

Я попытался десериализоваться с помощью этого кода :

string json = new WebClient ().DownloadString("https://mahdii.000webhostapp.com/?wpapi=get_posts&dev=1");
Приставка.WriteLine(json);
var deserialize_post = JsonConvert.DeserializeObject & lt;List<mycontainer>> (json);

мой класс:
namespace App8
{
    public class Author
    {
        public string id { get; set; }
        public string slug { get; set; }
        public string name { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string nickname { get; set; }
        public string url { get; set; }
        public string description { get; set; }
        public string gravatar { get; set; }
    }

    public class Post
    {
        public string id { get; set; }
        public string type { get; set; }
        public string slug { get; set; }
        public string url { get; set; }
        public string status { get; set; }
        public string title { get; set; }
        public string title_plain { get; set; }
        public string date { get; set; }
        public string modified { get; set; }
        public string excerpt { get; set; }
        public string parent { get; set; }
        public List<object> category { get; set; }
        public List<object> tag { get; set; }
        public List<Author> author { get; set; }
        public string comment_count { get; set; }
        public string comment_status { get; set; }
    }

    public class MyContainer
    {
        
        public List<Post> posts { get; set; }
    }
}

1 Ответов

Рейтинг:
4

Afzaal Ahmad Zeeshan

Одна единственная причина: Потому что вы делаете это неправильно Вы десериализуете его в "список списков сообщений". А ваш JSON - это "документ, содержащий сообщения". Я мог бы написать что-нибудь такое простое, как,

// Skip compile time type checking, first. 
dynamic deserialize_post = JsonConvert.DeserializeObject(json);

if(deserialize_post.posts != null) {
   // check if posts exist
   List<Post> posts = deserialize_post.posts;

   // Do further processing.
}

// Do the same for author etc.

Теперь проблема в основном заключается в том, что когда данные поступают из API, вам либо нужно сопоставить их обратно с "точный- та же копия объекта, иначе вы не сможете нанести его на карту нигде. Возможно, вы также видели, что я использовал, "posts", вместо "PostsЭто потому, что дело тоже имеет большое значение в данном случае. В том случае, когда вы загружаете данные из API, рекомендуется всегда использовать dynamic, так как вы можете не знать, что отправляется, а что нет, и затем проверить это во время выполнения; динамический пропуск проверки типов во время компиляции, но чтобы убедиться, что данные существуют, мы используем if...else ветвление для загрузки данных или отображения сообщения об ошибке, если данные не существуют.

Подробнее об этом читайте в моей статье, От нуля до героя в JSON с C#[^] и особенно ответ в нижней части статьи, в котором конкретно говорится об этой проблеме.


Karthik_Mahalingam

5

Afzaal Ahmad Zeeshan

Спасибо, Картик.

Member 12468321

Большое спасибо Афзаал Ахамад Зеешан, я посмотрю статью.
Спасибо за Ваше объяснение, Теперь я все понял.
Я попробую завтра и отправлю его

Afzaal Ahmad Zeeshan

Пожалуйста.

Member 12468321

Afzaal я попробовал, и это не помогло :s
Не могли бы вы, пожалуйста, если вы можете кодировать мне решение для моего случая, потому что я застрял на этом и не могу решить его, мне нужна ваша помощь,
я был бы очень признателен вам за помощь.