0

我创建了一个 .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 对其进行标记。

如何iTunesExt使用DataContractAttribute属性进行标记?还是我误解了?

4

1 回答 1

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

尝试将其修改为:

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

这允许您指定使用DataContractSerializer.

于 2016-07-16T02:56:17.293 回答