在asp.net MVC中使用xml feed的最佳方法(c#)

时间:2012-06-26 04:04:06

标签: c# xml asp.net-mvc-3 xmlserializer

我有一个MVC网站,当你点击一个按钮时,会使用Get方法从另一个网站获取xml数据。然后我需要在我的网页中显示部分XML。

我目前的方法是将XML反序列化为对象,并将对象传递给View,然后将获取适当的数据。

我的问题是我的类完全不匹配XML数据(它没有每个元素/属性/ etc)。数据太长,元素和属性太多,所以我不想把所有内容都写到类中。我无法使用XSD.exe从XML数据创建类,因为数据中存在一些错误(尽管xml数据在我的网页读取时工作正常)。

有更有效的方法吗?

请阅读此链接,IXmlSerializable可能会离开,尽管评论中也注意到了一些问题。看起来它可能很复杂。 How to deserialize only part of an XML document in C#

非常感谢您的帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

使用框架来使用Atom提要。请参阅以下内容:System.ServiceModel.Syndication namespace - msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx

答案 1 :(得分:0)

不是直接将原子提要xml反序列化为对象,而是先将xml加载到XDocument对象中,然后使用XLinq查询XDocument对象,并创建需要传递给视图的必要ViewModel 。

对于前。

查看模型

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/