Ошибка сериализации.Net SyndicationFeed при добавлении расширений в канал RSS
Я создаю.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
атрибут? Или я неправильно понимаю?
1 ответ
iTunesExt.Add(new XElement("MyElement", "Whatever");
Попробуйте изменить это на:
iTunesExt.Add(new XElement("MyElement", "Whatever"),
new DataContractSerializer(typeof(XElement)));
Это позволяет вам указать использование DataContractSerializer
,