Лучший способ использовать xml-канал в asp.net MVC (c #)

У меня есть веб-сайт MVC, который при нажатии кнопки будет использовать метод Get для получения данных XML с другого веб-сайта. Затем мне нужно отобразить часть этого XML на моей веб-странице.

Мой текущий подход заключается в десериализации XML в объекты и передаче объектов в представление, которое затем будет захватывать соответствующие данные.

Моя проблема в том, что мои классы не полностью соответствуют данным XML (у них не все элементы / атрибуты / и т. Д.). Данные слишком длинные, содержат слишком много элементов и атрибутов, поэтому я не хочу записывать все в классы. И я не мог создавать классы из данных XML с помощью XSD.exe из-за некоторой ошибки в данных (хотя данные xml работают нормально, когда моя веб-страница их читает).

Есть ли более эффективный способ сделать это?

Прочтите по этой ссылке, что IXmlSerializable может отсутствовать, хотя в комментариях также отмечены некоторые проблемы с ним. И кажется, что это может быть довольно сложно. Как десериализовать только часть XML документ на C #

Ваша помощь очень ценится. Спасибо!


person user1473617    schedule 26.06.2012    source источник
comment
Разве вы не можете просто использовать XSLT для преобразования XML в желаемый формат?   -  person Michael    schedule 26.06.2012


Ответы (2)


Используйте фреймворк для использования каналов Atom. См. Следующее: Пространство имен System.ServiceModel.Syndication - msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx

person Sergei B.    schedule 26.06.2012

Вместо прямой десериализации потока xml атома в объекты сначала загрузите xml в объект XDocument, а затем запросите объект XDocument с помощью XLinq и создайте необходимую модель представления, которую необходимо передать представлению.

Например,

Просмотреть модель

public class FeedViewModel
{
   ..
   public FeedItem[] FeedItems { get; set; }
}

public class FeedItem
{
   public string Title { get; set; }
   public string Description { get; set; }
   public DateTime Date { get; set; }
}

В вашем действии

var feedDocument = XDocument.Load(feedUrl);

var feedItems = feedDocument.Descendants("item")
    orderby DateTime.Parse(feed.Element("pubDate").Value) descending
    select new FeedItem
    {
      Title = feed.Element("title").Value,
      Description = feed.Element("description").Value,
      Date = DateTime.Parse(feed.Element("pubDate").Value)
    }.ToArray();

return View(new FeedViewModel{ FeedItems = feedItems });

http://deepumi.wordpress.com/2010/02/21/how-to-consume-an-atom-rss-feed-using-asp-net-c-with-linq/

person VJAI    schedule 26.06.2012