【问题标题】:.Net SyndicationFeed serialization error when adding extensions to the RSS feed.Net SyndicationFeed 向 RSS 提要添加扩展时出现序列化错误
【发布时间】:2016-07-16 10:56:17
【问题描述】:

我创建了一个 .NET Framework SyndicationFeed:

SyndicationFeed feed = SyndicationFeed.Load(xmlReader);

然后我创建一个新项目:

var newItem = new SyndicationItem();
newItem.Id = sourceFeedItem.ItemID;
newItem.Title = new TextSyndicationContent(sourceFeedItem.ItemTitle);

然后我添加一些 iTunes 项目扩展:

var iTunesExt = newItem.ElementExtensions;
iTunesExt.Add(new XElement("MyElement", "Whatever");
newItem.ElementExtensions.Add(iTunesExt);

然后我将该项目添加到items 列表中:

List<SyndicationItem> items = new List<SyndicationItem>();
items.Add(newItem);

并设置提要的Items 属性。

feed.Items = items;

最后我将SyndicationFeed feed 写入XmlWriter

feed.SaveAsRss20(xmlWriter);

如果没有添加扩展,则一切顺利,换句话说,如果newItem.ElementExtensions.Add(iTunesExt); 行没有执行。但是如果该行执行,我会在执行feed.SaveAsRss20(xmlWriter); 时收到以下错误。

键入“System.ServiceModel.Syndication.SyndicationElementExtension” 不能序列化。考虑用 DataContractAttribute 属性,并标记您的所有成员 想要使用 DataMemberAttribute 属性进行序列化。如果类型 是一个集合,考虑用 CollectionDataContractAttribute.

如何使用DataContractAttribute 属性标记iTunesExt?还是我理解错了?

【问题讨论】:

    标签: c# .net rss xml-serialization syndicationfeed


    【解决方案1】:
    iTunesExt.Add(new XElement("MyElement", "Whatever");
    

    尝试将其修改为:

    iTunesExt.Add(new XElement("MyElement", "Whatever"), 
        new DataContractSerializer(typeof(XElement)));
    

    这允许您指定使用DataContractSerializer

    【讨论】:

    • 我现在得到的是"An object of type 'System.Xml.Linq.XNodeReader' cannot be serialized at the top level for IXmlSerializable root type 'System.Xml.Linq.XElement' since its IsAny setting is 'true'. This type must write all its contents including the root element. Verify that the IXmlSerializable implementation is correct."。我将做一些进一步的资源,因为我不完全清楚我什至还理解错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2012-11-26
    • 2016-09-27
    • 2012-11-26
    相关资源
    最近更新 更多