Сериализация: что не так с этим кодом? - C#

Узнай цену своей работы

Формулировка задачи:

В курсе Байдачного http://www.microsoftvirtualacademy.com/training-courses/csharp_part_2 в 17 уроке приводится такой код. У автора работает, у меня - нет (только вместо украинского http://censor.net.ua/includes/news_full_ru.xml пришлось поставить ссылку на RIA, Цензор у нас заблокирован цензурой). Т.е. код включительно
string s = await web.DownloadStringTaskAsync(new Uri("http://ria.ru/export/rss2/incidents/index.xml", UriKind.Absolute));
работает, если например сделать
Console.Write(s);
- OK, но дальше:
XmlSerializer xml = new XmlSerializer(typeof(RssClass));
RssClass res = xml.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(s))) as RssClass;
не ОК. В чем причина?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
 
namespace ParserConsole
{    
    [XmlRoot(ElementName="rss")]
    public class RssClass
    {
        [XmlElement(ElementName = "channel")]
        public ChannelClass Channel { get; set; }
    }
 
    public class ChannelClass
    {
        [XmlElement(ElementName = "item")]
        public List<ItemClass> Items { get; set; }
    }
 
    public class ItemClass
    {
        [XmlElement(ElementName = "title")]
        public string Title { get; set; }
    }
 
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Serialization;
 
namespace ParserConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            ReadData();
            Thread.Sleep(1000);
            Console.ReadKey();
        }
 
        private async static void ReadData()
        {
            WebClient web = new WebClient();
            string s = await web.DownloadStringTaskAsync(new Uri("http://ria.ru/export/rss2/incidents/index.xml", UriKind.Absolute));
            
            XmlSerializer xml = new XmlSerializer(typeof(RssClass));
 
            RssClass res = xml.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(s))) as RssClass;
        }
    }
}

Решение задачи: «Сериализация: что не так с этим кодом?»

textual
Листинг программы
class Program {
    static void Main(string[] args) {
        RssClass rss = ReadData().Result;
        foreach (ItemClass item in rss.Channel.Items) {
            Console.WriteLine(item.Title);
        }
        Console.Read();
    }
    private async static Task<RssClass> ReadData() {
        WebClient web = new WebClient();
        string s = await web.DownloadStringTaskAsync(new Uri("http://ria.ru/export/rss2/incidents/index.xml", UriKind.Absolute));
 
        XmlSerializer xml = new XmlSerializer(typeof(RssClass));
 
        return xml.Deserialize(new MemoryStream(Encoding.Default.GetBytes(s))) as RssClass;
    }
}
[XmlRoot(ElementName = "rss")]
public class RssClass {
    [XmlElement(ElementName = "channel")]
    public ChannelClass Channel { get; set; }
}
 
public class ChannelClass {
    [XmlElement(ElementName = "item")]
    public List<ItemClass> Items { get; set; }
}
 
public class ItemClass {
    [XmlElement(ElementName = "title")]
    public string Title { get; set; }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5